diff options
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 38 |
1 files changed, 17 insertions, 21 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index 9d50865..23f620f 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -21,8 +21,6 @@ #include "RequestHandlers/DisconnectRequestHandler.h" #include "Logger.h" -#include <Net/Connection.h> - #include <sigc++/bind.h> #include <sigc++/retype_return.h> @@ -66,10 +64,8 @@ bool RequestManager::RequestMap::deleteRequest(uint16_t id) { } -void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) { - XmlPacket xmlPacket(packet); - - std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); +void RequestManager::receiveHandler(Connection *connection, const XmlPacket &packet, uint16_t requestId) { + std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection); if(it == requestMaps.end()) { // TODO: Error Logger::log(Logger::ERROR, "Received a packet from an unregistered connection."); @@ -78,34 +74,34 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack } RequestMap *requestMap = it->second; - RequestHandler *request = requestMap->findRequest(packet.getRequestId()); + RequestHandler *request = requestMap->findRequest(requestId); if(request) { - request->handlePacket(xmlPacket); + request->handlePacket(packet); return; } - std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(xmlPacket.getType()); + std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(packet.getType()); if(factoryIt != requestHandlerFactories.end()) { - request = factoryIt->second->createRequestHandler(connection, packet.getRequestId()); + request = factoryIt->second->createRequestHandler(connection, requestId); - requestMap->addRequest(packet.getRequestId(), request); - request->handlePacket(xmlPacket); + requestMap->addRequest(requestId, request); + request->handlePacket(packet); return; } - Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", xmlPacket.getType().c_str()); + Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", packet.getType().c_str()); XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); - connection->send(ret.encode(packet.getRequestId())); + connection->sendPacket(ret, requestId); } -RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection *connection, uint16_t *requestId) { - std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); +RequestManager::RequestMap* RequestManager::getUnusedRequestId(Connection *connection, uint16_t *requestId) { + std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection); if(it == requestMaps.end()) { Logger::log(Logger::CRITICAL, "Trying to send a request over an unregistered connecion."); @@ -121,14 +117,14 @@ RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection * return requestMap; } -void RequestManager::registerConnection(Net::Connection *connection) { +void RequestManager::registerConnection(Connection *connection) { requestMaps.insert(std::make_pair(connection, new RequestMap())); - connection->signalReceive().connect(sigc::mem_fun(this, &RequestManager::receiveHandler)); + connection->signalReceive().connect(sigc::bind<0>(sigc::mem_fun(this, &RequestManager::receiveHandler), connection)); } -void RequestManager::unregisterConnection(Net::Connection *connection) { - std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection); +void RequestManager::unregisterConnection(Connection *connection) { + std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection); if(it != requestMaps.end()) { delete it->second; @@ -154,7 +150,7 @@ RequestManager::RequestManager() : core(false), lastRequestId(-1) { RequestManager::~RequestManager() { unregisterPacketType("Disconnect"); - for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it) + for(std::map<Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it) delete it->second; for(std::map<std::string,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it) |