summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestHandler.h
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-06-04 22:23:07 +0200
committerMatthias Schiffer <matthias@gamezock.de>2009-06-04 22:23:07 +0200
commit0b27c37fe95c6aced613d51a3624f8930a96ad3f (patch)
tree5cb92568f70fe9789e99633ec71048389efb7fa4 /src/Common/RequestHandler.h
parent50d92f64547c5c06851976ceab5ed631ec93f647 (diff)
downloadmad-0b27c37fe95c6aced613d51a3624f8930a96ad3f.tar
mad-0b27c37fe95c6aced613d51a3624f8930a96ad3f.zip
RequestHandler-Interface ?berarbeitet
Diffstat (limited to 'src/Common/RequestHandler.h')
-rw-r--r--src/Common/RequestHandler.h47
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_ */