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.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp
index 5d3fdcd..2bf82b0 100644
--- a/src/Common/RequestManager.cpp
+++ b/src/Common/RequestManager.cpp
@@ -33,6 +33,11 @@ namespace Common {
std::auto_ptr<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;
@@ -90,12 +95,11 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack
return;
}
-
std::cerr << "Received an unexpected packet." << std::endl;
connection->send(Net::Packets::ErrorPacket(Net::Packet::ERROR, packet.getRequestId(), Exception(Exception::UNEXPECTED_PACKET)));
}
-bool RequestManager::sendRequest(Net::Connection *connection, Request *request) {
+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())
@@ -108,10 +112,9 @@ bool RequestManager::sendRequest(Net::Connection *connection, Request *request)
id = getRequestId();
} while(requestMap->findRequest(id));
- if(!request->sendRequest(connection, id))
- return false;
+ request->sendRequest(connection, id);
- requestMap->addRequest(id, request);
+ requestMap->addRequest(id, request.release());
return true;
}