summaryrefslogtreecommitdiffstats
path: root/src/Common/Request/DisconnectRequest.h
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/Request/DisconnectRequest.h
parent4cd88a87e66dbbb9be4137de04ad79c97ac5bf2c (diff)
downloadmad-1508969d508e41de824d1d1227be708136760cfa.tar
mad-1508969d508e41de824d1d1227be708136760cfa.zip
Request-Verarbeitung ?berarbeitet
Diffstat (limited to 'src/Common/Request/DisconnectRequest.h')
-rw-r--r--src/Common/Request/DisconnectRequest.h44
1 files changed, 41 insertions, 3 deletions
diff --git a/src/Common/Request/DisconnectRequest.h b/src/Common/Request/DisconnectRequest.h
index 309504d..9023c13 100644
--- a/src/Common/Request/DisconnectRequest.h
+++ b/src/Common/Request/DisconnectRequest.h
@@ -20,15 +20,53 @@
#ifndef DISCONNECTREQUEST_H_
#define DISCONNECTREQUEST_H_
-#include "../RequestInfo.h"
+#include "Request.h"
+#include "../RequestManager.h"
+#include <Net/Connection.h>
+#include <Net/Packet.h>
namespace Mad {
namespace Common {
namespace Request {
-class DisconnectRequest: public RequestInfo {
+class DisconnectRequest: public Request {
+ private:
+ DisconnectRequest() {}
+
public:
- DisconnectRequest() : RequestInfo(TYPE_DISCONNECT) {}
+ static bool send(Net::Connection *connection, RequestManager &requestManager) {
+ Request *request = new DisconnectRequest();
+
+ if(requestManager.sendRequest(connection, request))
+ return true;
+
+ delete request;
+ return false;
+ }
+
+ virtual bool sendRequest(Net::Connection *connection, unsigned short requestId) {
+ if(isSent())
+ return false;
+
+ if(!connection->send(Net::Packet(Net::Packet::TYPE_DISCONNECT_REQ, requestId)))
+ return false;
+
+ setSent();
+ return true;
+ }
+
+ virtual bool handlePacket(Net::Connection *connection, const Net::Packet &packet) {
+ if(isFinished())
+ return false;
+
+ if(packet.getType() != Net::Packet::TYPE_DISCONNECT_REP)
+ return false; // TODO Logging
+
+ connection->disconnect();
+
+ setFinished();
+ return true;
+ }
};
}