summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-09-13 03:59:58 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-09-13 03:59:58 +0200
commit7e87778a02f3d37865c10051a3f14038bbbcbaef (patch)
treeb1853c2e1d94d0d8d7d87b3e5db73fa618019b29 /src/Common/RequestManager.cpp
parent920c506d477bd7f357e05590e8cdedf8e5e8a1b8 (diff)
downloadmad-7e87778a02f3d37865c10051a3f14038bbbcbaef.tar
mad-7e87778a02f3d37865c10051a3f14038bbbcbaef.zip
Benutze weniger Inline-Funktionen
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp62
1 files changed, 59 insertions, 3 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index e71fd07..0dc7a48 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -27,11 +27,26 @@
namespace Mad {
namespace Common {
-RequestManager::RequestManager(bool core) : requestId(core ? -2 : -1) {
- registerPacketType<RequestHandler::DisconnectRequestHandler>(Net::Packet::DISCONNECT);
- registerPacketType<RequestHandler::IdentifyRequestHandler>(Net::Packet::IDENTIFY);
+RequestHandler::RequestHandler* RequestManager::RequestMap::findRequest(uint16_t id) {
+ iterator it = find(id);
+ if(it == end())
+ return 0;
+
+ return it->second;
+}
+
+bool RequestManager::RequestMap::deleteRequest(uint16_t id) {
+ iterator it = find(id);
+ if(it == end())
+ return false;
+
+ delete it->second;
+
+ erase(it);
+ return true;
}
+
void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) {
std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
@@ -92,5 +107,46 @@ bool RequestManager::sendRequest(Net::Connection *connection, Request::Request *
return true;
}
+void RequestManager::registerConnection(Net::Connection *connection) {
+ requestMaps.insert(std::make_pair(connection, new RequestMap()));
+
+ connection->signalReceive().connect(sigc::mem_fun(this, &RequestManager::receiveHandler));
+}
+
+void RequestManager::unregisterConnection(Net::Connection *connection) {
+ std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
+
+ if(it == requestMaps.end())
+ return;
+
+ delete it->second;
+
+ requestMaps.erase(it);
+}
+
+void RequestManager::unregisterPacketType(Net::Packet::Type type) {
+ std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.find(type);
+
+ if(it == requestHandlerFactories.end())
+ return;
+
+ delete it->second;
+
+ requestHandlerFactories.erase(it);
+}
+
+RequestManager::RequestManager(bool core) : requestId(core ? -2 : -1) {
+ registerPacketType<RequestHandler::DisconnectRequestHandler>(Net::Packet::DISCONNECT);
+ registerPacketType<RequestHandler::IdentifyRequestHandler>(Net::Packet::IDENTIFY);
+}
+
+RequestManager::~RequestManager() {
+ for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it)
+ delete it->second;
+
+ for(std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it)
+ delete it->second;
+}
+
}
}