diff options
Diffstat (limited to 'src/Common/RequestHandler.h')
-rw-r--r-- | src/Common/RequestHandler.h | 47 |
1 files changed, 24 insertions, 23 deletions
diff --git a/src/Common/RequestHandler.h b/src/Common/RequestHandler.h index d35ab1b..87fccba 100644 --- a/src/Common/RequestHandler.h +++ b/src/Common/RequestHandler.h @@ -17,8 +17,8 @@ * with this program. If not, see <http://www.gnu.org/licenses/>. */ -#ifndef MAD_COMMON_XMLREQUESTHANDLER_H_ -#define MAD_COMMON_XMLREQUESTHANDLER_H_ +#ifndef MAD_COMMON_REQUESTHANDLER_H_ +#define MAD_COMMON_REQUESTHANDLER_H_ #include "Connection.h" #include "XmlPacket.h" @@ -26,6 +26,8 @@ #include <Net/Signals/Signals.h> #include <boost/cstdint.hpp> +#include <boost/thread/locks.hpp> +#include <boost/thread/mutex.hpp> namespace Mad { namespace Common { @@ -35,43 +37,42 @@ class RequestManager; class RequestHandler : private boost::noncopyable { private: - Net::Signals::Signal0 finished; + friend class RequestManager; - Connection *connection; - boost::uint16_t requestId; + boost::mutex mutex; - protected: - RequestHandler(Connection *connection0, boost::uint16_t requestId0) : connection(connection0), requestId(requestId0) {} + Net::Signals::Signal20 finished; - void signalFinished() { - finished.emit(); + void callHandlePacket(boost::shared_ptr<const XmlPacket> packet) { + boost::lock_guard<boost::mutex> lock(mutex); + handlePacket(packet); } - Net::Signals::Connection connectSignalFinished(const Net::Signals::Signal0::slot_type &slot) { - return finished.connect(slot); - } + protected: + RequestHandler() {} - Connection* getConnection() const { - return connection; + void signalFinished() { + finished.emit(); } - boost::uint16_t getRequestId() const { - return requestId; - } + Connection* getConnection() const; - void sendPacket(const XmlPacket &packet) { - connection->sendPacket(packet, requestId); - } + void sendPacket(const XmlPacket &packet); - virtual void handlePacket(const XmlPacket &packet) = 0; + virtual void handlePacket(boost::shared_ptr<const XmlPacket> packet) = 0; public: virtual ~RequestHandler() {} - friend class RequestManager; + Net::Signals::Connection2 connectSignalFinished(const Net::Signals::Signal20::slot_type &slot) { + return finished.connect(slot); + } + void disconnectSignalFinished(const Net::Signals::Connection2 &con) { + finished.disconnect(con); + } }; } } -#endif /* MAD_COMMON_XMLREQUESTHANDLER_H_ */ +#endif /* MAD_COMMON_REQUESTHANDLER_H_ */ |