diff options
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r-- | src/Common/RequestManager.cpp | 13 |
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; } |