diff options
Diffstat (limited to 'src/Common/Request/PingRequest.h')
-rw-r--r-- | src/Common/Request/PingRequest.h | 47 |
1 files changed, 44 insertions, 3 deletions
diff --git a/src/Common/Request/PingRequest.h b/src/Common/Request/PingRequest.h index 35a0171..92e3c1a 100644 --- a/src/Common/Request/PingRequest.h +++ b/src/Common/Request/PingRequest.h @@ -20,15 +20,56 @@ #ifndef MAD_COMMON_REQUEST_PINGREQUEST_H_ #define MAD_COMMON_REQUEST_PINGREQUEST_H_ -#include "../RequestInfo.h" +#include "Request.h" +#include "../RequestManager.h" +#include <Net/Connection.h> +#include <Net/Packet.h> + +#include <iostream> namespace Mad { namespace Common { namespace Request { -class PingRequest : public RequestInfo { +class PingRequest : public Request { + private: + PingRequest() {} + public: - PingRequest() : RequestInfo(TYPE_PING) {} + static bool send(Net::Connection *connection, RequestManager &requestManager) { + Request *request = new PingRequest(); + + 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_PING, requestId))) + return false; + + setSent(); + return true; + } + + virtual bool handlePacket(Net::Connection*, const Net::Packet &packet) { + if(isFinished()) + return false; + + if(packet.getType() != Net::Packet::TYPE_PONG) + return false; // TODO Logging + + std::cout << "Received ping reply." << std::endl; + std::cout << " Request ID: " << packet.getRequestId() << std::endl; + + setFinished(); + return true; + } }; } |