From 9ca70bbfa460fe1c6c31b8e685be6df24935ab73 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 15 Sep 2008 06:26:15 +0200 Subject: Kann jetzt Status von Daemons abfragen --- src/Common/RequestManager.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/Common/RequestManager.cpp') 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 +#include #include namespace Mad { @@ -29,6 +31,15 @@ namespace Common { std::auto_ptr 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::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; } -- cgit v1.2.3