From 7e87778a02f3d37865c10051a3f14038bbbcbaef Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 13 Sep 2008 03:59:58 +0200 Subject: Benutze weniger Inline-Funktionen --- src/Common/RequestManager.cpp | 62 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'src/Common/RequestManager.cpp') 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(Net::Packet::DISCONNECT); - registerPacketType(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::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::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::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(Net::Packet::DISCONNECT); + registerPacketType(Net::Packet::IDENTIFY); +} + +RequestManager::~RequestManager() { + for(std::map::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it) + delete it->second; + + for(std::map::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it) + delete it->second; +} + } } -- cgit v1.2.3