diff options
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index ac1909b..9d50865 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -18,11 +18,11 @@ */ #include "RequestManager.h" -#include "Request.h" -#include "XmlPacket.h" #include "RequestHandlers/DisconnectRequestHandler.h" #include "Logger.h" +#include <Net/Connection.h> + #include <sigc++/bind.h> #include <sigc++/retype_return.h> @@ -81,48 +81,44 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack RequestHandler *request = requestMap->findRequest(packet.getRequestId()); if(request) { - request->handlePacket(connection, packet.getRequestId(), xmlPacket); + request->handlePacket(xmlPacket); return; } std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(xmlPacket.getType()); if(factoryIt != requestHandlerFactories.end()) { - request = factoryIt->second->createRequestHandler(); + request = factoryIt->second->createRequestHandler(connection, packet.getRequestId()); + requestMap->addRequest(packet.getRequestId(), request); - request->handlePacket(connection, packet.getRequestId(), xmlPacket); + request->handlePacket(xmlPacket); return; } - Logger::log(Logger::ERROR, "Received an unexpected packet."); + Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", xmlPacket.getType().c_str()); XmlPacket ret; ret.setType("Error"); ret.add("ErrorCode", Exception::UNEXPECTED_PACKET); - connection->send(ret.encode(requestId)); + connection->send(ret.encode(packet.getRequestId())); } -bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<Request> request) { +RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection *connection, uint16_t *requestId) { 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; + return 0; } RequestMap *requestMap = it->second; - uint16_t id; do { - id = getRequestId(); - } while(requestMap->findRequest(id)); + *requestId = getRequestId(); + } while(requestMap->findRequest(*requestId)); - request->sendRequest(connection, id); - - requestMap->addRequest(id, request.release()); - - return true; + return requestMap; } void RequestManager::registerConnection(Net::Connection *connection) { @@ -151,7 +147,7 @@ void RequestManager::unregisterPacketType(const std::string &type) { requestHandlerFactories.erase(it); } -RequestManager::RequestManager() : core(false), requestId(-1) { +RequestManager::RequestManager() : core(false), lastRequestId(-1) { registerPacketType<RequestHandlers::DisconnectRequestHandler>("Disconnect"); } |