diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2008-09-13 03:59:58 +0200 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2008-09-13 03:59:58 +0200 |
commit | 7e87778a02f3d37865c10051a3f14038bbbcbaef (patch) | |
tree | b1853c2e1d94d0d8d7d87b3e5db73fa618019b29 /src/Common/RequestManager.cpp | |
parent | 920c506d477bd7f357e05590e8cdedf8e5e8a1b8 (diff) | |
download | mad-7e87778a02f3d37865c10051a3f14038bbbcbaef.tar mad-7e87778a02f3d37865c10051a3f14038bbbcbaef.zip |
Benutze weniger Inline-Funktionen
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 62 |
1 files changed, 59 insertions, 3 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index e71fd07..0dc7a48 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -27,11 +27,26 @@ namespace Mad { namespace Common { -RequestManager::RequestManager(bool core) : requestId(core ? -2 : -1) { - registerPacketType<RequestHandler::DisconnectRequestHandler>(Net::Packet::DISCONNECT); - registerPacketType<RequestHandler::IdentifyRequestHandler>(Net::Packet::IDENTIFY); +RequestHandler::RequestHandler* RequestManager::RequestMap::findRequest(uint16_t id) { + iterator it = find(id); + if(it == end()) + return 0; + + return it->second; +} + +bool RequestManager::RequestMap::deleteRequest(uint16_t id) { + iterator it = find(id); + if(it == end()) + return false; + + delete it->second; + + erase(it); + return true; } + void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) { std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); @@ -92,5 +107,46 @@ bool RequestManager::sendRequest(Net::Connection *connection, Request::Request * return true; } +void RequestManager::registerConnection(Net::Connection *connection) { + requestMaps.insert(std::make_pair(connection, new RequestMap())); + + connection->signalReceive().connect(sigc::mem_fun(this, &RequestManager::receiveHandler)); +} + +void RequestManager::unregisterConnection(Net::Connection *connection) { + std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); + + if(it == requestMaps.end()) + return; + + delete it->second; + + requestMaps.erase(it); +} + +void RequestManager::unregisterPacketType(Net::Packet::Type type) { + std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.find(type); + + if(it == requestHandlerFactories.end()) + return; + + delete it->second; + + requestHandlerFactories.erase(it); +} + +RequestManager::RequestManager(bool core) : requestId(core ? -2 : -1) { + registerPacketType<RequestHandler::DisconnectRequestHandler>(Net::Packet::DISCONNECT); + registerPacketType<RequestHandler::IdentifyRequestHandler>(Net::Packet::IDENTIFY); +} + +RequestManager::~RequestManager() { + for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it) + delete it->second; + + for(std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it) + delete it->second; +} + } } |