From 1508969d508e41de824d1d1227be708136760cfa Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Tue, 8 Jul 2008 22:31:29 +0200 Subject: Request-Verarbeitung ?berarbeitet --- src/Common/RequestManager.cpp | 62 +++++++++++++------------------------------ 1 file changed, 19 insertions(+), 43 deletions(-) (limited to 'src/Common/RequestManager.cpp') diff --git a/src/Common/RequestManager.cpp b/src/Common/RequestManager.cpp index 34a9141..2d79b25 100644 --- a/src/Common/RequestManager.cpp +++ b/src/Common/RequestManager.cpp @@ -35,7 +35,16 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack } RequestMap &requestInfo = it->second; - RequestMap::iterator it2; + Request::Request *request = requestInfo.findRequest(packet.getRequestId()); + + if(request) { + request->handlePacket(connection, packet); + + if(request->isFinished()) + requestInfo.deleteRequest(packet.getRequestId()); + + return; + } switch(packet.getType()) { case Net::Packet::TYPE_PING: @@ -44,40 +53,16 @@ void RequestManager::receiveHandler(Net::Connection *connection, const Net::Pack connection->send(Net::Packet(Net::Packet::TYPE_PONG, packet.getRequestId(), packet.getData(), packet.getLength())); break; - case Net::Packet::TYPE_PONG: - it2 = requestInfo.find(packet.getRequestId()); - if(it2 == requestInfo.end() || it2->second.getType() != RequestInfo::TYPE_PING) { - // TODO: Error - std::cerr << "Received an unexpected ping reply." << std::endl; - - return; - } - - requestInfo.erase(it2); - - std::cout << "Received ping reply." << std::endl; - std::cout << " Request ID: " << packet.getRequestId() << std::endl; - break; case Net::Packet::TYPE_DISCONNECT_REQ: connection->send(Net::Packet(Net::Packet::TYPE_DISCONNECT_REP, packet.getRequestId())); connection->disconnect(); break; - case Net::Packet::TYPE_DISCONNECT_REP: - it2 = requestInfo.find(packet.getRequestId()); - if(it2 == requestInfo.end() || it2->second.getType() != RequestInfo::TYPE_DISCONNECT) { - // TODO: Error - std::cerr << "Received an unexpected disconnect reply." << std::endl; - - return; - } - - requestInfo.erase(it2); - - connection->disconnect(); + default: + std::cerr << "Received an unexpected packet." << std::endl; } } -bool RequestManager::sendRequest(Net::Connection *connection, RequestInfo requestData) { +bool RequestManager::sendRequest(Net::Connection *connection, Request::Request *request) { std::map::iterator it = requestMap.find(connection); if(it == requestMap.end()) @@ -85,24 +70,15 @@ bool RequestManager::sendRequest(Net::Connection *connection, RequestInfo reques RequestMap &requestInfo = it->second; - unsigned short request; + unsigned short id; do { - request = getRequestId(); - } while(requestInfo.find(request) != requestInfo.end()); + id = getRequestId(); + } while(requestInfo.findRequest(id)); - switch(requestData.getType()) { - case RequestInfo::TYPE_PING: - if(!connection->send(Net::Packet(Net::Packet::TYPE_PING, request))) - return false; - - requestInfo.insert(std::make_pair(request, requestData)); - break; - case RequestInfo::TYPE_DISCONNECT: - if(!connection->send(Net::Packet(Net::Packet::TYPE_DISCONNECT_REQ, request))) - return false; + if(!request->sendRequest(connection, id)) + return false; - requestInfo.insert(std::make_pair(request, requestData)); - } + requestInfo.addRequest(id, request); return true; } -- cgit v1.2.3