#ifndef PROTOCOL_H #define PROTOCOL_H #include #include #include #include #include #include "serializable_item.h" #include #include #include "pb/server_message.pb.h" class QXmlStreamReader; class QXmlStreamWriter; class QXmlStreamAttributes; class ProtocolResponse; class DeckList; class GameEvent; class GameEventContainer; class GameEventContext; class MoveCardToZone; class ProtocolItem : public SerializableItem_Map { Q_OBJECT private: bool receiverMayDelete; public: static const int protocolVersion = 13; virtual int getItemId() const = 0; bool getReceiverMayDelete() const { return receiverMayDelete; } void setReceiverMayDelete(bool _receiverMayDelete) { receiverMayDelete = _receiverMayDelete; } ProtocolItem(const QString &_itemType, const QString &_itemSubType); bool isEmpty() const { return false; } }; // ---------------- // --- COMMANDS --- // ---------------- class GameEventStorage { private: ::google::protobuf::Message *gameEventContext; GameEventContainer *gameEventQueuePublic; GameEventContainer *gameEventQueueOmniscient; GameEventContainer *gameEventQueuePrivate; int privatePlayerId; public: GameEventStorage(); ~GameEventStorage(); void setGameEventContext(::google::protobuf::Message *_gameEventContext) { gameEventContext = _gameEventContext; } ::google::protobuf::Message *getGameEventContext() const { return gameEventContext; } GameEventContainer *getGameEventQueuePublic() const { return gameEventQueuePublic; } void enqueueGameEventPublic(const ::google::protobuf::Message &event, int playerId); GameEventContainer *getGameEventQueueOmniscient() const { return gameEventQueueOmniscient; } void enqueueGameEventOmniscient(const ::google::protobuf::Message &event, int playerId); GameEventContainer *getGameEventQueuePrivate() const { return gameEventQueuePrivate; } void enqueueGameEventPrivate(const ::google::protobuf::Message &event, int playerId); // XXX - DRAN DENKEN, dass privatePlayerId gesetzt wird int getPrivatePlayerId() const { return privatePlayerId; } void enqueueGameEvent(const ::google::protobuf::Message &event, int playerId); }; class ResponseContainer { private: ::google::protobuf::Message *responseExtension; QList > preResponseQueue, postResponseQueue; public: ResponseContainer() : responseExtension(0) { } ~ResponseContainer() { /* XXX responseExtension und Inhalt beider Listen löschen */ } void setResponseExtension(::google::protobuf::Message *_responseExtension) { responseExtension = _responseExtension; } ::google::protobuf::Message *getResponseExtension() const { return responseExtension; } void enqueuePreResponseItem(ServerMessage::MessageType type, ::google::protobuf::Message *item) { preResponseQueue.append(qMakePair(type, item)); } void enqueuePostResponseItem(ServerMessage::MessageType type, ::google::protobuf::Message *item) { postResponseQueue.append(qMakePair(type, item)); } const QList > &getPreResponseQueue() const { return preResponseQueue; } const QList > &getPostResponseQueue() const { return postResponseQueue; } }; /* * XXX * class Response_DeckList : public ProtocolResponse { Q_OBJECT public: Response_DeckList(int _cmdId = -1, ResponseCode _responseCode = RespOk, DeckList_Directory *_root = 0); int getItemId() const { return ItemId_Response_DeckList; } static SerializableItem *newItem() { return new Response_DeckList; } DeckList_Directory *getRoot() const { return static_cast(itemMap.value("directory")); } }; class Response_DeckDownload : public ProtocolResponse { Q_OBJECT public: Response_DeckDownload(int _cmdId = -1, ResponseCode _responseCode = RespOk, DeckList *_deck = 0); int getItemId() const { return ItemId_Response_DeckDownload; } static SerializableItem *newItem() { return new Response_DeckDownload; } DeckList *getDeck() const; }; class Response_DeckUpload : public ProtocolResponse { Q_OBJECT public: Response_DeckUpload(int _cmdId = -1, ResponseCode _responseCode = RespOk, DeckList_File *_file = 0); int getItemId() const { return ItemId_Response_DeckUpload; } static SerializableItem *newItem() { return new Response_DeckUpload; } DeckList_File *getFile() const { return static_cast(itemMap.value("file")); } }; */ #endif