summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index ac1909b..9d50865 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -18,11 +18,11 @@
*/
#include "RequestManager.h"
-#include "Request.h"
-#include "XmlPacket.h"
#include "RequestHandlers/DisconnectRequestHandler.h"
#include "Logger.h"
+#include <Net/Connection.h>
+
#include <sigc++/bind.h>
#include <sigc++/retype_return.h>
@@ -81,48 +81,44 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack
RequestHandler *request = requestMap->findRequest(packet.getRequestId());
if(request) {
- request->handlePacket(connection, packet.getRequestId(), xmlPacket);
+ request->handlePacket(xmlPacket);
return;
}
std::map<std::string,RequestHandlerFactory*>::iterator factoryIt = requestHandlerFactories.find(xmlPacket.getType());
if(factoryIt != requestHandlerFactories.end()) {
- request = factoryIt->second->createRequestHandler();
+ request = factoryIt->second->createRequestHandler(connection, packet.getRequestId());
+
requestMap->addRequest(packet.getRequestId(), request);
- request->handlePacket(connection, packet.getRequestId(), xmlPacket);
+ request->handlePacket(xmlPacket);
return;
}
- Logger::log(Logger::ERROR, "Received an unexpected packet.");
+ Logger::logf(Logger::ERROR, "Received an unexpected packet with type '%s'.", xmlPacket.getType().c_str());
XmlPacket ret;
ret.setType("Error");
ret.add("ErrorCode", Exception::UNEXPECTED_PACKET);
- connection->send(ret.encode(requestId));
+ connection->send(ret.encode(packet.getRequestId()));
}
-bool RequestManager::sendRequest(Net::Connection *connection, std::auto_ptr<Request> request) {
+RequestManager::RequestMap* RequestManager::getUnusedRequestId(Net::Connection *connection, uint16_t *requestId) {
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;
+ return 0;
}
RequestMap *requestMap = it->second;
- uint16_t id;
do {
- id = getRequestId();
- } while(requestMap->findRequest(id));
+ *requestId = getRequestId();
+ } while(requestMap->findRequest(*requestId));
- request->sendRequest(connection, id);
-
- requestMap->addRequest(id, request.release());
-
- return true;
+ return requestMap;
}
void RequestManager::registerConnection(Net::Connection *connection) {
@@ -151,7 +147,7 @@ void RequestManager::unregisterPacketType(const std::string &type) {
requestHandlerFactories.erase(it);
}
-RequestManager::RequestManager() : core(false), requestId(-1) {
+RequestManager::RequestManager() : core(false), lastRequestId(-1) {
registerPacketType<RequestHandlers::DisconnectRequestHandler>("Disconnect");
}