#ifndef SERVERMESSAGE_H__ #define SERVERMESSAGE_H__ #include #include #include "Message.h" #include "Server.h" #include "Exceptions.h" namespace FCPLib { class JobTicket; typedef boost::shared_ptr JobTicketPtr; class ServerMessage { virtual void read(boost::shared_ptr s); protected: Message::Ptr message; public: typedef boost::shared_ptr Ptr; static Ptr factory(boost::shared_ptr s); std::string getIdOfJob() const { std::string id = message->getField("Identifier"); return id.size() ? id : ""; } virtual bool isLast(const JobTicketPtr job) const = 0; virtual bool isError() const = 0; virtual ~ServerMessage() {} const std::string& toString() const; const Message::Ptr getMessage() const { return message; } }; typedef std::vector Response; template struct IsLastT { Message::Ptr message; IsLastT( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const { return isLast; } }; typedef IsLastT IsLastTrue; typedef IsLastT IsLastFalse; struct IsLastPeer { Message::Ptr message; IsLastPeer( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const; }; struct IsLastPeerNote { Message::Ptr message; IsLastPeerNote( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const; }; struct IsLastPutFailed { Message::Ptr message; IsLastPutFailed( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const; }; struct IsLastGetFailed { Message::Ptr message; IsLastGetFailed( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const; }; struct IsLastDataFound { Message::Ptr message; IsLastDataFound( Message::Ptr m ) : message(m) {} bool operator()(const JobTicketPtr job) const; }; template class ServerMessageT : public ServerMessage { friend class ServerMessage; ServerMessageT() {} public: bool isLast(const JobTicketPtr job) const { return isLastT( message )( job ); } bool isError() const { return isErrorT; } }; class AllDataMessage : public ServerMessage { friend class ServerMessage; boost::shared_ptr server; std::size_t bytesToRead; void read(boost::shared_ptr s); AllDataMessage() {} public: bool isLast(const JobTicketPtr job) const; bool isError() const { return false; } }; typedef class ServerMessageT NodeHelloMessage; typedef class ServerMessageT CloseConnectionDuplicateNameMessage; typedef class ServerMessageT PeerMessage; typedef class ServerMessageT PeerNoteMessage; typedef class ServerMessageT PeerRemovedMessage; typedef class ServerMessageT EndMessage; typedef class ServerMessageT NodeDataMessage; typedef class ServerMessageT ConfigDataMessage; typedef class ServerMessageT TestDDAReplyMessage; typedef class ServerMessageT TestDDACompleteMessage; typedef class ServerMessageT SSKKeypairMessage; typedef class ServerMessageT PersistentGetMessage; typedef class ServerMessageT PersistentPutMessage; typedef class ServerMessageT PersistentPutDirMessage; typedef class ServerMessageT URIGeneratedMessage; typedef class ServerMessageT PutSuccessfulMessage; typedef class ServerMessageT PutFetchableMessage; typedef class ServerMessageT DataFoundMessage; typedef class ServerMessageT StartedCompressionMessage; typedef class ServerMessageT FinishedCompressionMessage; typedef class ServerMessageT SimpleProgressMessage; typedef class ServerMessageT PersistentRequestRemovedMessage; typedef class ServerMessageT PersistentRequestModifiedMessage; typedef class ServerMessageT PutFailedMessage; typedef class ServerMessageT GetFailedMessage; typedef class ServerMessageT ProtocolErrorMessage; typedef class ServerMessageT IdentifierCollisionMessage; typedef class ServerMessageT UnknownNodeIdentifierMessage; typedef class ServerMessageT UnknownPeerNoteTypeMessage; typedef class ServerMessageT SubscribedUSKUpdate; } #endif // SERVERMESSAGE_H__