summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-03-21 13:31:03 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-03-21 13:31:03 +0100
commitc07b837dbad1ac176a6c18062dab9184e7080309 (patch)
tree277d5f7c06e2e71b25a9b9619917f04158b789e8 /src/Common/RequestManager.cpp
parent8f098fc3070f791302ec1f497588fab6ed409980 (diff)
downloadmad-c07b837dbad1ac176a6c18062dab9184e7080309.tar
mad-c07b837dbad1ac176a6c18062dab9184e7080309.zip
Net::Connection-Klasse zur besseren Strukturierung gekapselt
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp38
1 files changed, 17 insertions, 21 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index 9d50865..23f620f 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -21,8 +21,6 @@
#include "RequestHandlers/DisconnectRequestHandler.h"
#include "Logger.h"
-#include <Net/Connection.h>
-
#include <sigc++/bind.h>
#include <sigc++/retype_return.h>
@@ -66,10 +64,8 @@ bool RequestManager::RequestMap::deleteRequest(uint16_t id) {
}
-void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) {
- XmlPacket xmlPacket(packet);
-
- std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
+void RequestManager::receiveHandler(Connection *connection, const XmlPacket &packet, uint16_t requestId) {
+ std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
if(it == requestMaps.end()) {
// TODO: Error
Logger::log(Logger::ERROR, "Received a packet from an unregistered connection.");
@@ -78,34 +74,34 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack
}
RequestMap *requestMap = it->second;
- RequestHandler *request = requestMap->findRequest(packet.getRequestId());
+ RequestHandler *request = requestMap->findRequest(requestId);
if(request) {
- request->handlePacket(xmlPacket);
+ request->handlePacket(packet);
return;
}
- std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(xmlPacket.getType());
+ std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(packet.getType());
if(factoryIt != requestHandlerFactories.end()) {
- request = factoryIt->second->createRequestHandler(connection, packet.getRequestId());
+ request = factoryIt->second->createRequestHandler(connection, requestId);
- requestMap->addRequest(packet.getRequestId(), request);
- request->handlePacket(xmlPacket);
+ requestMap->addRequest(requestId, request);
+ request->handlePacket(packet);
return;
}
- Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", xmlPacket.getType().c_str());
+ Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", packet.getType().c_str());
XmlPacket ret;
ret.setType("Error");
ret.add("ErrorCode", Exception::UNEXPECTED_PACKET);
- connection->send(ret.encode(packet.getRequestId()));
+ connection->sendPacket(ret, requestId);
}
-RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection *connection, uint16_t *requestId) {
- std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
+RequestManager::RequestMap* RequestManager::getUnusedRequestId(Connection *connection, uint16_t *requestId) {
+ std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
if(it == requestMaps.end()) {
Logger::log(Logger::CRITICAL, "Trying to send a request over an unregistered connecion.");
@@ -121,14 +117,14 @@ RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection *
return requestMap;
}
-void RequestManager::registerConnection(Net::Connection *connection) {
+void RequestManager::registerConnection(Connection *connection) {
requestMaps.insert(std::make_pair(connection, new RequestMap()));
- connection->signalReceive().connect(sigc::mem_fun(this, &RequestManager::receiveHandler));
+ connection->signalReceive().connect(sigc::bind<0>(sigc::mem_fun(this, &RequestManager::receiveHandler), connection));
}
-void RequestManager::unregisterConnection(Net::Connection *connection) {
- std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
+void RequestManager::unregisterConnection(Connection *connection) {
+ std::map<Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
if(it != requestMaps.end()) {
delete it->second;
@@ -154,7 +150,7 @@ RequestManager::RequestManager() : core(false), lastRequestId(-1) {
RequestManager::~RequestManager() {
unregisterPacketType("Disconnect");
- for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it)
+ for(std::map<Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it)
delete it->second;
for(std::map<std::string,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it)