summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp17
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()));