summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2009-03-04 22:53:02 +0100
committerMatthias Schiffer <matthias@gamezock.de>2009-03-04 22:53:02 +0100
commitc316a3115bf790fb623f0765dd6b04f781af5b51 (patch)
treeb757067dcd2495bf8aa5d3ca6f42886eb55c93fa /src/Common/RequestManager.cpp
parentd88e4d0da7ff801b0c58b5043ade0743547cfb90 (diff)
downloadmad-c316a3115bf790fb623f0765dd6b04f781af5b51.tar
mad-c316a3115bf790fb623f0765dd6b04f781af5b51.zip
Alte Request-Klassen entfernt
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp137
1 files changed, 12 insertions, 125 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index b5acc5c..de4f2ca 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -18,7 +18,6 @@
*/
#include "RequestManager.h"
-#include "Request.h"
#include "XmlRequest.h"
#include "XmlPacket.h"
#include "RequestHandlers/DisconnectRequestHandler.h"
@@ -33,40 +32,6 @@ namespace Common {
RequestManager RequestManager::requestManager;
-RequestManager::RequestMap::~RequestMap() {
- for(iterator it = begin(); it != end(); ++it)
- delete it->second;
-}
-
-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())
- 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;
-}
-
-
RequestManager::XmlRequestMap::~XmlRequestMap() {
for(iterator it = begin(); it != end(); ++it)
delete it->second;
@@ -102,60 +67,29 @@ bool RequestManager::XmlRequestMap::deleteRequest(uint16_t id) {
void RequestManager::receiveHandler(Net::Connection *connection, const Net::Packet &packet) {
- std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
-
- if(it == requestMaps.end()) {
- // TODO: Error
- Logger::log(Logger::ERROR, "Received a packet from an unregistered connection.");
-
- return;
- }
-
- RequestMap *requestMap = it->second;
- RequestHandler *request = requestMap->findRequest(packet.getRequestId());
+ XmlPacket xmlPacket(packet);
- if(request) {
- request->handlePacket(connection, packet);
-
- return;
- }
-
- std::map<Net::Connection*,XmlRequestMap*>::iterator it2 = xmlRequestMaps.find(connection);
- if(it2 == xmlRequestMaps.end()) {
+ std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection);
+ if(it == xmlRequestMaps.end()) {
// TODO: Error
Logger::log(Logger::ERROR, "Received a packet from an unregistered connection.");
return;
}
- XmlRequestMap *xmlRequestMap = it2->second;
+ XmlRequestMap *xmlRequestMap = it->second;
XmlRequestHandler *xmlRequest = xmlRequestMap->findRequest(packet.getRequestId());
if(xmlRequest) {
- XmlPacket xmlPacket(packet);
xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket);
-
return;
}
- if(packet.getType() == Net::Packet::XML) {
- XmlPacket xmlPacket(packet);
-
- std::map<std::string,XmlRequestHandlerFactory*>::iterator factoryIt = xmlRequestHandlerFactories.find(xmlPacket.getType());
- if(factoryIt != xmlRequestHandlerFactories.end()) {
- xmlRequest = factoryIt->second->createRequestHandler();
- xmlRequestMap->addRequest(packet.getRequestId(), xmlRequest);
- xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket);
-
- 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);
+ std::map<std::string,XmlRequestHandlerFactory*>::iterator factoryIt = xmlRequestHandlerFactories.find(xmlPacket.getType());
+ if(factoryIt != xmlRequestHandlerFactories.end()) {
+ xmlRequest = factoryIt->second->createRequestHandler();
+ xmlRequestMap->addRequest(packet.getRequestId(), xmlRequest);
+ xmlRequest->handlePacket(connection, packet.getRequestId(), xmlPacket);
return;
}
@@ -169,28 +103,6 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack
connection->send(ret.encode(requestId));
}
-bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<RequestBase> request) {
- std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.find(connection);
-
- if(it == requestMaps.end()) {
- Logger::log(Logger::CRITICAL, "Trying to send a request over an unregistered connecion.");
- return false;
- }
-
- RequestMap *requestMap = it->second;
-
- uint16_t id;
- do {
- id = getRequestId();
- } while(requestMap->findRequest(id));
-
- request->sendRequest(connection, id);
-
- requestMap->addRequest(id, request.release());
-
- return true;
-}
-
bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<XmlRequest> request) {
std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection);
@@ -214,37 +126,18 @@ bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<XmlR
}
void RequestManager::registerConnection(Net::Connection *connection) {
- requestMaps.insert(std::make_pair(connection, new RequestMap()));
xmlRequestMaps.insert(std::make_pair(connection, new XmlRequestMap()));
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);
+ std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.find(connection);
- if(it != requestMaps.end()) {
+ if(it != xmlRequestMaps.end()) {
delete it->second;
- requestMaps.erase(it);
+ xmlRequestMaps.erase(it);
}
-
- std::map<Net::Connection*,XmlRequestMap*>::iterator it2 = xmlRequestMaps.find(connection);
-
- if(it2 != xmlRequestMaps.end()) {
- delete it2->second;
- xmlRequestMaps.erase(it2);
- }
-}
-
-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);
}
void RequestManager::unregisterPacketType(const std::string &type) {
@@ -265,15 +158,9 @@ RequestManager::RequestManager() : core(false), requestId(-1) {
RequestManager::~RequestManager() {
unregisterPacketType("Disconnect");
- for(std::map<Net::Connection*,RequestMap*>::iterator it = requestMaps.begin(); it != requestMaps.end(); ++it)
- delete it->second;
-
for(std::map<Net::Connection*,XmlRequestMap*>::iterator it = xmlRequestMaps.begin(); it != xmlRequestMaps.end(); ++it)
delete it->second;
- for(std::map<Net::Packet::Type,RequestHandlerFactory*>::iterator it = requestHandlerFactories.begin(); it != requestHandlerFactories.end(); ++it)
- delete it->second;
-
for(std::map<std::string,XmlRequestHandlerFactory*>::iterator it = xmlRequestHandlerFactories.begin(); it != xmlRequestHandlerFactories.end(); ++it)
delete it->second;
}