diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-02-23 22:20:10 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-02-23 22:20:10 +0100 |
commit | 8d629ca48e9b5530416127e2e52c945fe1f9ee52 (patch) | |
tree | 11fd1e27349343110dd041f177822cdf85af3710 /src/Common/RequestManager.h | |
parent | 0a8624a39a7d0a99963153533a7ca3092154d3bd (diff) | |
download | mad-8d629ca48e9b5530416127e2e52c945fe1f9ee52.tar mad-8d629ca48e9b5530416127e2e52c945fe1f9ee52.zip |
Verarbeitung von XML-Paketen
Diffstat (limited to 'src/Common/RequestManager.h')
-rw-r--r-- | src/Common/RequestManager.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/Common/RequestManager.h b/src/Common/RequestManager.h index c2f58d2..00d940d 100644 --- a/src/Common/RequestManager.h +++ b/src/Common/RequestManager.h @@ -30,6 +30,8 @@ namespace Common { class RequestBase; class RequestHandler; +class XmlRequestBase; +class XmlRequestHandler; class RequestManager { private: @@ -48,6 +50,21 @@ class RequestManager { bool deleteRequest(uint16_t id); }; + class XmlRequestMap : private std::map<uint16_t,XmlRequestHandler*> { + private: + // Prevent shallow copy + XmlRequestMap(const XmlRequestMap &o); + XmlRequestMap& operator=(const XmlRequestMap &o); + + public: + XmlRequestMap() {} + ~XmlRequestMap(); + + bool addRequest(uint16_t id, XmlRequestHandler *info); + XmlRequestHandler* findRequest(uint16_t id); + bool deleteRequest(uint16_t id); + }; + class RequestHandlerFactory { protected: RequestHandlerFactory() {} @@ -64,13 +81,31 @@ class RequestManager { } }; + class XmlRequestHandlerFactory { + protected: + XmlRequestHandlerFactory() {} + + public: + virtual XmlRequestHandler* createRequestHandler() = 0; + virtual ~XmlRequestHandlerFactory() {} + }; + + template<class T> class SpecificXmlRequestHandlerFactory : public XmlRequestHandlerFactory { + public: + virtual XmlRequestHandler* createRequestHandler() { + return new T(); + } + }; + static RequestManager requestManager; std::map<Net::Connection*,RequestMap*> requestMaps; + std::map<Net::Connection*,XmlRequestMap*> xmlRequestMaps; bool core; uint16_t requestId; std::map<Net::Packet::Type,RequestHandlerFactory*> requestHandlerFactories; + std::map<std::string,XmlRequestHandlerFactory*> xmlRequestHandlerFactories; uint16_t getRequestId() { return requestId+=2; @@ -108,7 +143,14 @@ class RequestManager { void unregisterPacketType(Net::Packet::Type type); + template <class T> void registerPacketType(const std::string &type) { + xmlRequestHandlerFactories.insert(std::make_pair(type, new SpecificXmlRequestHandlerFactory<T>())); + } + + void unregisterPacketType(const std::string &type); + bool sendRequest(Net::Connection *connection, std::auto_ptr<RequestBase> request); + bool sendRequest(Net::Connection *connection, std::auto_ptr<XmlRequestBase> request); virtual ~RequestManager(); }; |