diff options
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 137 |
1 files changed, 12 insertions, 125 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index b5acc5c..de4f2ca 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -18,7 +18,6 @@ */ #include "RequestManager.h" -#include "Request.h" #include "XmlRequest.h" #include "XmlPacket.h" #include "RequestHandlers/DisconnectRequestHandler.h" @@ -33,40 +32,6 @@ namespace Common { RequestManager RequestManager::requestManager; -RequestManager::RequestMap::~RequestMap() { - for(iterator it = begin(); it != end(); ++it) - delete it->second; -} - -bool RequestManager::RequestMap::addRequest(uint16_t id, RequestHandler *info) { - if(!insert(std::make_pair(id, info)).second) - return false; - - info->signalFinished().connect(sigc::hide_return(sigc::bind(sigc::mem_fun(this, &RequestManager::RequestMap::deleteRequest), id))); - - return true; -} - -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; -} - - RequestManager::XmlRequestMap::~XmlRequestMap() { for(iterator it = begin(); it != end(); ++it) delete it->second; @@ -102,60 +67,29 @@ bool RequestManager::XmlRequestMap::deleteRequest(uint16_t id) { void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) { - std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); - - if(it == requestMaps.end()) { - // TODO: Error - Logger::log(Logger::ERROR, "Received a packet from an unregistered connection."); - - return; - } - - RequestMap *requestMap = it->second; - RequestHandler *request = requestMap->findRequest(packet.getRequestId()); + XmlPacket xmlPacket(packet); - if(request) { - request->handlePacket(connection, packet); - - return; - } - - std::map<Net::Connection*,XmlRequestMap*>::iterator it2 = xmlRequestMaps.find(connection); - if(it2 == xmlRequestMaps.end()) { + std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection); + if(it == xmlRequestMaps.end()) { // TODO: Error Logger::log(Logger::ERROR, "Received a packet from an unregistered connection."); return; } - XmlRequestMap *xmlRequestMap = it2->second; + XmlRequestMap *xmlRequestMap = it->second; XmlRequestHandler *xmlRequest = xmlRequestMap->findRequest(packet.getRequestId()); if(xmlRequest) { - XmlPacket xmlPacket(packet); xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket); - return; } - if(packet.getType() == Net::Packet::XML) { - XmlPacket xmlPacket(packet); - - std::map<std::string,XmlRequestHandlerFactory*>::iterator factoryIt = xmlRequestHandlerFactories.find(xmlPacket.getType()); - if(factoryIt != xmlRequestHandlerFactories.end()) { - xmlRequest = factoryIt->second->createRequestHandler(); - xmlRequestMap->addRequest(packet.getRequestId(), xmlRequest); - xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket); - - return; - } - } - - std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(packet.getType()); - if(factoryIt != requestHandlerFactories.end()) { - request = factoryIt->second->createRequestHandler(); - requestMap->addRequest(packet.getRequestId(), request); - request->handlePacket(connection, packet); + std::map<std::string,XmlRequestHandlerFactory*>::iterator factoryIt = xmlRequestHandlerFactories.find(xmlPacket.getType()); + if(factoryIt != xmlRequestHandlerFactories.end()) { + xmlRequest = factoryIt->second->createRequestHandler(); + xmlRequestMap->addRequest(packet.getRequestId(), xmlRequest); + xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket); return; } @@ -169,28 +103,6 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack connection->send(ret.encode(requestId)); } -bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<RequestBase> request) { - std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); - - if(it == requestMaps.end()) { - Logger::log(Logger::CRITICAL, "Trying to send a request over an unregistered connecion."); - return false; - } - - RequestMap *requestMap = it->second; - - uint16_t id; - do { - id = getRequestId(); - } while(requestMap->findRequest(id)); - - request->sendRequest(connection, id); - - requestMap->addRequest(id, request.release()); - - return true; -} - bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<XmlRequest> request) { std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection); @@ -214,37 +126,18 @@ bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<XmlR } void RequestManager::registerConnection(Net::Connection *connection) { - requestMaps.insert(std::make_pair(connection, new RequestMap())); xmlRequestMaps.insert(std::make_pair(connection, new XmlRequestMap())); 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); + std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection); - if(it != requestMaps.end()) { + if(it != xmlRequestMaps.end()) { delete it->second; - requestMaps.erase(it); + xmlRequestMaps.erase(it); } - - std::map<Net::Connection*,XmlRequestMap*>::iterator it2 = xmlRequestMaps.find(connection); - - if(it2 != xmlRequestMaps.end()) { - delete it2->second; - xmlRequestMaps.erase(it2); - } -} - -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); } void RequestManager::unregisterPacketType(const std::string &type) { @@ -265,15 +158,9 @@ RequestManager::RequestManager() : core(false), requestId(-1) { RequestManager::~RequestManager() { unregisterPacketType("Disconnect"); - for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it) - delete it->second; - for(std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.begin(); it != xmlRequestMaps.end(); ++it) delete it->second; - for(std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it) - delete it->second; - for(std::map<std::string,XmlRequestHandlerFactory*>::iterator it = xmlRequestHandlerFactories.begin(); it != xmlRequestHandlerFactories.end(); ++it) delete it->second; } |