116 lines
4.4 KiB
C++
116 lines
4.4 KiB
C++
#ifndef PROTOCOL_H
|
|
#define PROTOCOL_H
|
|
|
|
#include <QString>
|
|
#include <QMap>
|
|
#include <QHash>
|
|
#include <QObject>
|
|
#include <QVariant>
|
|
#include "serializable_item.h"
|
|
#include <QPair>
|
|
|
|
#include <google/protobuf/message.h>
|
|
#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<QPair<ServerMessage::MessageType, ::google::protobuf::Message *> > 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<QPair<ServerMessage::MessageType, ::google::protobuf::Message *> > &getPreResponseQueue() const { return preResponseQueue; }
|
|
const QList<QPair<ServerMessage::MessageType, ::google::protobuf::Message *> > &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<DeckList_Directory *>(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<DeckList_File *>(itemMap.value("file")); }
|
|
};
|
|
*/
|
|
#endif
|