diff options
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index 5f6c3a4..f8da7dd 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -18,6 +18,7 @@ */ #include "RequestManager.h" +#include "Request/Request.h" #include <iostream> @@ -35,7 +36,7 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack } RequestMap *requestMap = it->second; - Request::Request *request = requestMap->findRequest(packet.getRequestId()); + RequestHandler *request = requestMap->findRequest(packet.getRequestId()); if(request) { request->handlePacket(connection, packet); @@ -46,6 +47,20 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack return; } + std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(packet.getType()); + if(factoryIt != requestHandlerFactories.end()) { + request = factoryIt->second->createRequestHandler(); + request->handlePacket(connection, packet); + + if(!request->isFinished()) + requestMap->addRequest(packet.getRequestId(), request); + else + delete request; + + return; + } + + switch(packet.getType()) { case Net::Packet::TYPE_DISCONNECT: connection->send(Net::Packet(Net::Packet::TYPE_OK, packet.getRequestId())); |