summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-09-15 06:26:15 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-09-15 06:26:15 +0200
commit9ca70bbfa460fe1c6c31b8e685be6df24935ab73 (patch)
tree8fe0a6e164d7d2f4e5f23e073c0a80a0b29daf94 /src/Common/RequestManager.cpp
parent30bec92571ba23f1f2aa6b12149f6545a4ef0d7e (diff)
downloadmad-9ca70bbfa460fe1c6c31b8e685be6df24935ab73.tar
mad-9ca70bbfa460fe1c6c31b8e685be6df24935ab73.zip
Kann jetzt Status von Daemons abfragen
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index 8ebfce0..e2864b1 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -21,6 +21,8 @@
#include "Request.h"
#include "RequestHandlers/DisconnectRequestHandler.h"
+#include <sigc++/bind.h>
+#include <sigc++/retype_return.h>
#include <iostream>
namespace Mad {
@@ -29,6 +31,15 @@ namespace Common {
std::auto_ptr<RequestManager> RequestManager::requestManager;
+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())
@@ -65,22 +76,15 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack
if(request) {
request->handlePacket(connection, packet);
- if(request->isFinished())
- requestMap->deleteRequest(packet.getRequestId());
-
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);
- if(!request->isFinished())
- requestMap->addRequest(packet.getRequestId(), request);
- else
- delete request;
-
return;
}