summaryrefslogtreecommitdiffstats
path: root/src/Common/RequestManager.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-07-08 22:31:29 +0200
committerMatthias Schiffer <matthias@gamezock.de>2008-07-08 22:31:29 +0200
commit1508969d508e41de824d1d1227be708136760cfa (patch)
tree8950d27e708ac8f0451f14c94c8cf76b0ce15877 /src/Common/RequestManager.cpp
parent4cd88a87e66dbbb9be4137de04ad79c97ac5bf2c (diff)
downloadmad-1508969d508e41de824d1d1227be708136760cfa.tar
mad-1508969d508e41de824d1d1227be708136760cfa.zip
Request-Verarbeitung ?berarbeitet
Diffstat (limited to 'src/Common/RequestManager.cpp')
-rw-r--r--src/Common/RequestManager.cpp62
1 files changed, 19 insertions, 43 deletions
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<Net::Connection*,RequestMap>::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;
}