response codes
This commit is contained in:
parent
3461b60183
commit
bd2855cb95
7 changed files with 186 additions and 92 deletions
|
@ -4,14 +4,14 @@
|
|||
#include "protocol.h"
|
||||
#include "protocol_commands.h"
|
||||
|
||||
QHash<QString, Command::NewCommandFunction> Command::commandHash;
|
||||
QHash<QString, ProtocolItem::NewItemFunction> ProtocolItem::itemNameHash;
|
||||
|
||||
Command::Command(const QString &_cmdName)
|
||||
: cmdName(_cmdName)
|
||||
ProtocolItem::ProtocolItem(const QString &_itemName)
|
||||
: itemName(_itemName)
|
||||
{
|
||||
}
|
||||
|
||||
bool Command::read(QXmlStreamReader &xml)
|
||||
bool ProtocolItem::read(QXmlStreamReader &xml)
|
||||
{
|
||||
while (!xml.atEnd()) {
|
||||
xml.readNext();
|
||||
|
@ -19,7 +19,7 @@ bool Command::read(QXmlStreamReader &xml)
|
|||
qDebug() << "startElement: " << xml.name().toString();
|
||||
} else if (xml.isEndElement()) {
|
||||
qDebug() << "endElement: " << xml.name().toString();
|
||||
if (xml.name() == cmdName) {
|
||||
if (xml.name() == getItemType()) {
|
||||
extractParameters();
|
||||
qDebug() << "FERTIG";
|
||||
deleteLater();
|
||||
|
@ -39,9 +39,11 @@ bool Command::read(QXmlStreamReader &xml)
|
|||
return false;
|
||||
}
|
||||
|
||||
void Command::write(QXmlStreamWriter &xml)
|
||||
void ProtocolItem::write(QXmlStreamWriter &xml)
|
||||
{
|
||||
xml.writeStartElement(cmdName);
|
||||
xml.writeStartElement(getItemType());
|
||||
if (!itemName.isEmpty())
|
||||
xml.writeAttribute("name", itemName);
|
||||
|
||||
QMapIterator<QString, QString> i(parameters);
|
||||
while (i.hasNext()) {
|
||||
|
@ -52,9 +54,63 @@ void Command::write(QXmlStreamWriter &xml)
|
|||
xml.writeEndElement();
|
||||
}
|
||||
|
||||
Command *Command::getNewCommand(const QString &name)
|
||||
ProtocolItem *ProtocolItem::getNewItem(const QString &name)
|
||||
{
|
||||
if (!commandHash.contains(name))
|
||||
if (!itemNameHash.contains(name))
|
||||
return 0;
|
||||
return commandHash.value(name)();
|
||||
return itemNameHash.value(name)();
|
||||
}
|
||||
|
||||
void ProtocolItem::initializeHash()
|
||||
{
|
||||
initializeHashAuto();
|
||||
itemNameHash.insert("resp", ProtocolResponse::newItem);
|
||||
ProtocolResponse::initializeHash();
|
||||
}
|
||||
|
||||
int Command::lastCmdId = 0;
|
||||
|
||||
Command::Command(const QString &_itemName, int _cmdId)
|
||||
: ProtocolItem(_itemName), cmdId(_cmdId)
|
||||
{
|
||||
if (cmdId == -1)
|
||||
cmdId = lastCmdId++;
|
||||
setParameter("cmd_id", cmdId);
|
||||
}
|
||||
|
||||
void Command::extractParameters()
|
||||
{
|
||||
bool ok;
|
||||
cmdId = parameters["cmd_id"].toInt(&ok);
|
||||
if (!ok)
|
||||
cmdId = -1;
|
||||
}
|
||||
|
||||
QHash<QString, ProtocolResponse::ResponseCode> ProtocolResponse::responseHash;
|
||||
|
||||
ProtocolResponse::ProtocolResponse(int _cmdId, ResponseCode _responseCode)
|
||||
: ProtocolItem(QString()), cmdId(_cmdId), responseCode(_responseCode)
|
||||
{
|
||||
setParameter("cmd_id", cmdId);
|
||||
setParameter("response_code", responseHash.key(responseCode));
|
||||
}
|
||||
|
||||
void ProtocolResponse::extractParameters()
|
||||
{
|
||||
bool ok;
|
||||
cmdId = parameters["cmd_id"].toInt(&ok);
|
||||
if (!ok)
|
||||
cmdId = -1;
|
||||
|
||||
responseCode = responseHash.value(parameters["response_code"], RespOk);
|
||||
}
|
||||
|
||||
void ProtocolResponse::initializeHash()
|
||||
{
|
||||
responseHash.insert("ok", RespOk);
|
||||
responseHash.insert("name_not_found", RespNameNotFound);
|
||||
responseHash.insert("login_needed", RespLoginNeeded);
|
||||
responseHash.insert("context_error", RespContextError);
|
||||
responseHash.insert("wrong_password", RespWrongPassword);
|
||||
responseHash.insert("spectators_not_allowed", RespSpectatorsNotAllowed);
|
||||
}
|
||||
|
|
|
@ -9,28 +9,43 @@
|
|||
|
||||
class QXmlStreamReader;
|
||||
class QXmlStreamWriter;
|
||||
class QXmlStreamAttributes;
|
||||
|
||||
class Command : public QObject {
|
||||
class ProtocolItem : public QObject {
|
||||
Q_OBJECT
|
||||
protected:
|
||||
typedef Command *(*NewCommandFunction)();
|
||||
static QHash<QString, NewCommandFunction> commandHash;
|
||||
typedef ProtocolItem *(*NewItemFunction)();
|
||||
static QHash<QString, NewItemFunction> itemNameHash;
|
||||
|
||||
QString cmdName;
|
||||
QString itemName;
|
||||
QMap<QString, QString> parameters;
|
||||
QString currentElementText;
|
||||
void setParameter(const QString &name, const QString &value) { parameters[name] = value; }
|
||||
void setParameter(const QString &name, bool value) { parameters[name] = (value ? "1" : "0"); }
|
||||
void setParameter(const QString &name, int value) { parameters[name] = QString::number(value); }
|
||||
virtual void extractParameters() { };
|
||||
virtual QString getItemType() const = 0;
|
||||
private:
|
||||
static void initializeHashAuto();
|
||||
public:
|
||||
Command(const QString &_cmdName);
|
||||
ProtocolItem(const QString &_itemName);
|
||||
static void initializeHash();
|
||||
static Command *getNewCommand(const QString &name);
|
||||
static ProtocolItem *getNewItem(const QString &name);
|
||||
virtual bool read(QXmlStreamReader &xml);
|
||||
virtual void write(QXmlStreamWriter &xml);
|
||||
};
|
||||
|
||||
class Command : public ProtocolItem {
|
||||
private:
|
||||
int cmdId;
|
||||
static int lastCmdId;
|
||||
protected:
|
||||
QString getItemType() const { return "cmd"; }
|
||||
void extractParameters();
|
||||
public:
|
||||
Command(const QString &_itemName, int _cmdId = -1);
|
||||
};
|
||||
|
||||
class ChatCommand : public Command {
|
||||
Q_OBJECT
|
||||
private:
|
||||
|
@ -67,4 +82,21 @@ public:
|
|||
int getGameId() const { return gameId; }
|
||||
};
|
||||
|
||||
class ProtocolResponse : public ProtocolItem {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum ResponseCode { RespOk, RespNameNotFound, RespLoginNeeded, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed };
|
||||
private:
|
||||
int cmdId;
|
||||
ResponseCode responseCode;
|
||||
static QHash<QString, ResponseCode> responseHash;
|
||||
protected:
|
||||
QString getItemType() const { return "resp"; }
|
||||
void extractParameters();
|
||||
public:
|
||||
ProtocolResponse(int _cmdId = -1, ResponseCode _responseCode = RespOk);
|
||||
static void initializeHash();
|
||||
static ProtocolItem *newItem() { return new ProtocolResponse; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -305,36 +305,36 @@ Command_SubmitDeck::Command_SubmitDeck(int _gameId)
|
|||
: GameCommand("submit_deck", _gameId)
|
||||
{
|
||||
}
|
||||
void Command::initializeHash()
|
||||
void ProtocolItem::initializeHashAuto()
|
||||
{
|
||||
commandHash.insert("ping", Command_Ping::newCommand);
|
||||
commandHash.insert("login", Command_Login::newCommand);
|
||||
commandHash.insert("chat_list_channels", Command_ChatListChannels::newCommand);
|
||||
commandHash.insert("chat_join_channel", Command_ChatJoinChannel::newCommand);
|
||||
commandHash.insert("chat_leave_channel", Command_ChatLeaveChannel::newCommand);
|
||||
commandHash.insert("chat_say", Command_ChatSay::newCommand);
|
||||
commandHash.insert("list_games", Command_ListGames::newCommand);
|
||||
commandHash.insert("create_game", Command_CreateGame::newCommand);
|
||||
commandHash.insert("join_game", Command_JoinGame::newCommand);
|
||||
commandHash.insert("leave_game", Command_LeaveGame::newCommand);
|
||||
commandHash.insert("say", Command_Say::newCommand);
|
||||
commandHash.insert("shuffle", Command_Shuffle::newCommand);
|
||||
commandHash.insert("roll_die", Command_RollDie::newCommand);
|
||||
commandHash.insert("draw_cards", Command_DrawCards::newCommand);
|
||||
commandHash.insert("move_card", Command_MoveCard::newCommand);
|
||||
commandHash.insert("create_token", Command_CreateToken::newCommand);
|
||||
commandHash.insert("create_arrow", Command_CreateArrow::newCommand);
|
||||
commandHash.insert("delete_arrow", Command_DeleteArrow::newCommand);
|
||||
commandHash.insert("set_card_attr", Command_SetCardAttr::newCommand);
|
||||
commandHash.insert("ready_start", Command_ReadyStart::newCommand);
|
||||
commandHash.insert("inc_counter", Command_IncCounter::newCommand);
|
||||
commandHash.insert("add_counter", Command_AddCounter::newCommand);
|
||||
commandHash.insert("set_counter", Command_SetCounter::newCommand);
|
||||
commandHash.insert("del_counter", Command_DelCounter::newCommand);
|
||||
commandHash.insert("next_turn", Command_NextTurn::newCommand);
|
||||
commandHash.insert("set_active_phase", Command_SetActivePhase::newCommand);
|
||||
commandHash.insert("dump_zone", Command_DumpZone::newCommand);
|
||||
commandHash.insert("stop_dump_zone", Command_StopDumpZone::newCommand);
|
||||
commandHash.insert("dump_all", Command_DumpAll::newCommand);
|
||||
commandHash.insert("submit_deck", Command_SubmitDeck::newCommand);
|
||||
itemNameHash.insert("cmdping", Command_Ping::newItem);
|
||||
itemNameHash.insert("cmdlogin", Command_Login::newItem);
|
||||
itemNameHash.insert("cmdchat_list_channels", Command_ChatListChannels::newItem);
|
||||
itemNameHash.insert("cmdchat_join_channel", Command_ChatJoinChannel::newItem);
|
||||
itemNameHash.insert("cmdchat_leave_channel", Command_ChatLeaveChannel::newItem);
|
||||
itemNameHash.insert("cmdchat_say", Command_ChatSay::newItem);
|
||||
itemNameHash.insert("cmdlist_games", Command_ListGames::newItem);
|
||||
itemNameHash.insert("cmdcreate_game", Command_CreateGame::newItem);
|
||||
itemNameHash.insert("cmdjoin_game", Command_JoinGame::newItem);
|
||||
itemNameHash.insert("cmdleave_game", Command_LeaveGame::newItem);
|
||||
itemNameHash.insert("cmdsay", Command_Say::newItem);
|
||||
itemNameHash.insert("cmdshuffle", Command_Shuffle::newItem);
|
||||
itemNameHash.insert("cmdroll_die", Command_RollDie::newItem);
|
||||
itemNameHash.insert("cmddraw_cards", Command_DrawCards::newItem);
|
||||
itemNameHash.insert("cmdmove_card", Command_MoveCard::newItem);
|
||||
itemNameHash.insert("cmdcreate_token", Command_CreateToken::newItem);
|
||||
itemNameHash.insert("cmdcreate_arrow", Command_CreateArrow::newItem);
|
||||
itemNameHash.insert("cmddelete_arrow", Command_DeleteArrow::newItem);
|
||||
itemNameHash.insert("cmdset_card_attr", Command_SetCardAttr::newItem);
|
||||
itemNameHash.insert("cmdready_start", Command_ReadyStart::newItem);
|
||||
itemNameHash.insert("cmdinc_counter", Command_IncCounter::newItem);
|
||||
itemNameHash.insert("cmdadd_counter", Command_AddCounter::newItem);
|
||||
itemNameHash.insert("cmdset_counter", Command_SetCounter::newItem);
|
||||
itemNameHash.insert("cmddel_counter", Command_DelCounter::newItem);
|
||||
itemNameHash.insert("cmdnext_turn", Command_NextTurn::newItem);
|
||||
itemNameHash.insert("cmdset_active_phase", Command_SetActivePhase::newItem);
|
||||
itemNameHash.insert("cmddump_zone", Command_DumpZone::newItem);
|
||||
itemNameHash.insert("cmdstop_dump_zone", Command_StopDumpZone::newItem);
|
||||
itemNameHash.insert("cmddump_all", Command_DumpAll::newItem);
|
||||
itemNameHash.insert("cmdsubmit_deck", Command_SubmitDeck::newItem);
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@ class Command_Ping : public Command {
|
|||
private:
|
||||
public:
|
||||
Command_Ping();
|
||||
static Command *newCommand() { return new Command_Ping; }
|
||||
static ProtocolItem *newItem() { return new Command_Ping; }
|
||||
};
|
||||
class Command_Login : public Command {
|
||||
Q_OBJECT
|
||||
|
@ -19,7 +19,7 @@ public:
|
|||
Command_Login(const QString &_username = QString(), const QString &_password = QString());
|
||||
QString getUsername() const { return username; }
|
||||
QString getPassword() const { return password; }
|
||||
static Command *newCommand() { return new Command_Login; }
|
||||
static ProtocolItem *newItem() { return new Command_Login; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -28,7 +28,7 @@ class Command_ChatListChannels : public Command {
|
|||
private:
|
||||
public:
|
||||
Command_ChatListChannels();
|
||||
static Command *newCommand() { return new Command_ChatListChannels; }
|
||||
static ProtocolItem *newItem() { return new Command_ChatListChannels; }
|
||||
};
|
||||
class Command_ChatJoinChannel : public Command {
|
||||
Q_OBJECT
|
||||
|
@ -37,7 +37,7 @@ private:
|
|||
public:
|
||||
Command_ChatJoinChannel(const QString &_channel = QString());
|
||||
QString getChannel() const { return channel; }
|
||||
static Command *newCommand() { return new Command_ChatJoinChannel; }
|
||||
static ProtocolItem *newItem() { return new Command_ChatJoinChannel; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -46,7 +46,7 @@ class Command_ChatLeaveChannel : public ChatCommand {
|
|||
private:
|
||||
public:
|
||||
Command_ChatLeaveChannel(const QString &_channel = QString());
|
||||
static Command *newCommand() { return new Command_ChatLeaveChannel; }
|
||||
static ProtocolItem *newItem() { return new Command_ChatLeaveChannel; }
|
||||
};
|
||||
class Command_ChatSay : public ChatCommand {
|
||||
Q_OBJECT
|
||||
|
@ -55,7 +55,7 @@ private:
|
|||
public:
|
||||
Command_ChatSay(const QString &_channel = QString(), const QString &_message = QString());
|
||||
QString getMessage() const { return message; }
|
||||
static Command *newCommand() { return new Command_ChatSay; }
|
||||
static ProtocolItem *newItem() { return new Command_ChatSay; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -64,7 +64,7 @@ class Command_ListGames : public Command {
|
|||
private:
|
||||
public:
|
||||
Command_ListGames();
|
||||
static Command *newCommand() { return new Command_ListGames; }
|
||||
static ProtocolItem *newItem() { return new Command_ListGames; }
|
||||
};
|
||||
class Command_CreateGame : public Command {
|
||||
Q_OBJECT
|
||||
|
@ -79,7 +79,7 @@ public:
|
|||
QString getPassword() const { return password; }
|
||||
int getMaxPlayers() const { return maxPlayers; }
|
||||
bool getSpectatorsAllowed() const { return spectatorsAllowed; }
|
||||
static Command *newCommand() { return new Command_CreateGame; }
|
||||
static ProtocolItem *newItem() { return new Command_CreateGame; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -94,7 +94,7 @@ public:
|
|||
int getGameId() const { return gameId; }
|
||||
QString getPassword() const { return password; }
|
||||
bool getSpectator() const { return spectator; }
|
||||
static Command *newCommand() { return new Command_JoinGame; }
|
||||
static ProtocolItem *newItem() { return new Command_JoinGame; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -103,7 +103,7 @@ class Command_LeaveGame : public GameCommand {
|
|||
private:
|
||||
public:
|
||||
Command_LeaveGame(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_LeaveGame; }
|
||||
static ProtocolItem *newItem() { return new Command_LeaveGame; }
|
||||
};
|
||||
class Command_Say : public GameCommand {
|
||||
Q_OBJECT
|
||||
|
@ -112,7 +112,7 @@ private:
|
|||
public:
|
||||
Command_Say(int _gameId = -1, const QString &_message = QString());
|
||||
QString getMessage() const { return message; }
|
||||
static Command *newCommand() { return new Command_Say; }
|
||||
static ProtocolItem *newItem() { return new Command_Say; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -121,7 +121,7 @@ class Command_Shuffle : public GameCommand {
|
|||
private:
|
||||
public:
|
||||
Command_Shuffle(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_Shuffle; }
|
||||
static ProtocolItem *newItem() { return new Command_Shuffle; }
|
||||
};
|
||||
class Command_RollDie : public GameCommand {
|
||||
Q_OBJECT
|
||||
|
@ -130,7 +130,7 @@ private:
|
|||
public:
|
||||
Command_RollDie(int _gameId = -1, int _sides = -1);
|
||||
int getSides() const { return sides; }
|
||||
static Command *newCommand() { return new Command_RollDie; }
|
||||
static ProtocolItem *newItem() { return new Command_RollDie; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -141,7 +141,7 @@ private:
|
|||
public:
|
||||
Command_DrawCards(int _gameId = -1, int _number = -1);
|
||||
int getNumber() const { return number; }
|
||||
static Command *newCommand() { return new Command_DrawCards; }
|
||||
static ProtocolItem *newItem() { return new Command_DrawCards; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -162,7 +162,7 @@ public:
|
|||
int getX() const { return x; }
|
||||
int getY() const { return y; }
|
||||
bool getFaceDown() const { return faceDown; }
|
||||
static Command *newCommand() { return new Command_MoveCard; }
|
||||
static ProtocolItem *newItem() { return new Command_MoveCard; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -181,7 +181,7 @@ public:
|
|||
QString getPt() const { return pt; }
|
||||
int getX() const { return x; }
|
||||
int getY() const { return y; }
|
||||
static Command *newCommand() { return new Command_CreateToken; }
|
||||
static ProtocolItem *newItem() { return new Command_CreateToken; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -204,7 +204,7 @@ public:
|
|||
QString getTargetPlayerZone() const { return targetPlayerZone; }
|
||||
int getTargetCardId() const { return targetCardId; }
|
||||
int getColor() const { return color; }
|
||||
static Command *newCommand() { return new Command_CreateArrow; }
|
||||
static ProtocolItem *newItem() { return new Command_CreateArrow; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -215,7 +215,7 @@ private:
|
|||
public:
|
||||
Command_DeleteArrow(int _gameId = -1, int _arrowId = -1);
|
||||
int getArrowId() const { return arrowId; }
|
||||
static Command *newCommand() { return new Command_DeleteArrow; }
|
||||
static ProtocolItem *newItem() { return new Command_DeleteArrow; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -232,7 +232,7 @@ public:
|
|||
int getCardId() const { return cardId; }
|
||||
QString getAttrName() const { return attrName; }
|
||||
QString getAttrValue() const { return attrValue; }
|
||||
static Command *newCommand() { return new Command_SetCardAttr; }
|
||||
static ProtocolItem *newItem() { return new Command_SetCardAttr; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -241,7 +241,7 @@ class Command_ReadyStart : public GameCommand {
|
|||
private:
|
||||
public:
|
||||
Command_ReadyStart(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_ReadyStart; }
|
||||
static ProtocolItem *newItem() { return new Command_ReadyStart; }
|
||||
};
|
||||
class Command_IncCounter : public GameCommand {
|
||||
Q_OBJECT
|
||||
|
@ -252,7 +252,7 @@ public:
|
|||
Command_IncCounter(int _gameId = -1, int _counterId = -1, int _delta = -1);
|
||||
int getCounterId() const { return counterId; }
|
||||
int getDelta() const { return delta; }
|
||||
static Command *newCommand() { return new Command_IncCounter; }
|
||||
static ProtocolItem *newItem() { return new Command_IncCounter; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -269,7 +269,7 @@ public:
|
|||
int getColor() const { return color; }
|
||||
int getRadius() const { return radius; }
|
||||
int getValue() const { return value; }
|
||||
static Command *newCommand() { return new Command_AddCounter; }
|
||||
static ProtocolItem *newItem() { return new Command_AddCounter; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -282,7 +282,7 @@ public:
|
|||
Command_SetCounter(int _gameId = -1, int _counterId = -1, int _value = -1);
|
||||
int getCounterId() const { return counterId; }
|
||||
int getValue() const { return value; }
|
||||
static Command *newCommand() { return new Command_SetCounter; }
|
||||
static ProtocolItem *newItem() { return new Command_SetCounter; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -293,7 +293,7 @@ private:
|
|||
public:
|
||||
Command_DelCounter(int _gameId = -1, int _counterId = -1);
|
||||
int getCounterId() const { return counterId; }
|
||||
static Command *newCommand() { return new Command_DelCounter; }
|
||||
static ProtocolItem *newItem() { return new Command_DelCounter; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -302,7 +302,7 @@ class Command_NextTurn : public GameCommand {
|
|||
private:
|
||||
public:
|
||||
Command_NextTurn(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_NextTurn; }
|
||||
static ProtocolItem *newItem() { return new Command_NextTurn; }
|
||||
};
|
||||
class Command_SetActivePhase : public GameCommand {
|
||||
Q_OBJECT
|
||||
|
@ -311,7 +311,7 @@ private:
|
|||
public:
|
||||
Command_SetActivePhase(int _gameId = -1, int _phase = -1);
|
||||
int getPhase() const { return phase; }
|
||||
static Command *newCommand() { return new Command_SetActivePhase; }
|
||||
static ProtocolItem *newItem() { return new Command_SetActivePhase; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -326,7 +326,7 @@ public:
|
|||
int getPlayerId() const { return playerId; }
|
||||
QString getZoneName() const { return zoneName; }
|
||||
int getNumberCards() const { return numberCards; }
|
||||
static Command *newCommand() { return new Command_DumpZone; }
|
||||
static ProtocolItem *newItem() { return new Command_DumpZone; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -339,7 +339,7 @@ public:
|
|||
Command_StopDumpZone(int _gameId = -1, int _playerId = -1, const QString &_zoneName = QString());
|
||||
int getPlayerId() const { return playerId; }
|
||||
QString getZoneName() const { return zoneName; }
|
||||
static Command *newCommand() { return new Command_StopDumpZone; }
|
||||
static ProtocolItem *newItem() { return new Command_StopDumpZone; }
|
||||
protected:
|
||||
void extractParameters();
|
||||
};
|
||||
|
@ -348,14 +348,14 @@ class Command_DumpAll : public GameCommand {
|
|||
private:
|
||||
public:
|
||||
Command_DumpAll(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_DumpAll; }
|
||||
static ProtocolItem *newItem() { return new Command_DumpAll; }
|
||||
};
|
||||
class Command_SubmitDeck : public GameCommand {
|
||||
Q_OBJECT
|
||||
private:
|
||||
public:
|
||||
Command_SubmitDeck(int _gameId = -1);
|
||||
static Command *newCommand() { return new Command_SubmitDeck; }
|
||||
static ProtocolItem *newItem() { return new Command_SubmitDeck; }
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -78,7 +78,7 @@ while (<file>) {
|
|||
print headerfile "public:\n"
|
||||
. "\t$className($constructorParamsH);\n"
|
||||
. $paramStr4
|
||||
. "\tstatic Command *newCommand() { return new $className; }\n"
|
||||
. "\tstatic ProtocolItem *newItem() { return new $className; }\n"
|
||||
. ($paramStr5 eq '' ? '' : "protected:\n\tvoid extractParameters();\n")
|
||||
. "};\n";
|
||||
print cppfile $className . "::$className($constructorParamsCpp)\n"
|
||||
|
@ -93,14 +93,14 @@ while (<file>) {
|
|||
. $paramStr5
|
||||
. "}\n";
|
||||
}
|
||||
$initializeHash .= "\tcommandHash.insert(\"$name1\", $className" . "::newCommand);\n";
|
||||
$initializeHash .= "\titemNameHash.insert(\"cmd$name1\", $className" . "::newItem);\n";
|
||||
}
|
||||
close(file);
|
||||
|
||||
print headerfile "\n#endif\n";
|
||||
close(headerfile);
|
||||
|
||||
print cppfile "void Command::initializeHash()\n"
|
||||
print cppfile "void ProtocolItem::initializeHashAuto()\n"
|
||||
. "{\n"
|
||||
. $initializeHash
|
||||
. "}\n";
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "protocol_commands.h"
|
||||
|
||||
Widget::Widget()
|
||||
: QMainWindow(), currentCommand(0)
|
||||
: QMainWindow()
|
||||
{
|
||||
edit1 = new QTextEdit;
|
||||
start = new QPushButton;
|
||||
|
@ -26,12 +26,14 @@ Widget::Widget()
|
|||
central->setLayout(vbox);
|
||||
setCentralWidget(central);
|
||||
|
||||
resize(400, 500);
|
||||
|
||||
Command::initializeHash();
|
||||
}
|
||||
|
||||
void Widget::startClicked()
|
||||
{
|
||||
currentCommand = 0;
|
||||
currentItem = 0;
|
||||
xmlWriter.writeStartDocument();
|
||||
xmlWriter.writeStartElement("cockatrice_communication");
|
||||
xmlWriter.writeAttribute("version", "4");
|
||||
|
@ -44,15 +46,18 @@ void Widget::startClicked()
|
|||
|
||||
Command *test3 = new Command_ChatSay("foobar", "Hallo, dies ist ein Test");
|
||||
test3->write(xmlWriter);
|
||||
|
||||
ProtocolResponse *test4 = new ProtocolResponse(123, ProtocolResponse::RespContextError);
|
||||
test4->write(xmlWriter);
|
||||
}
|
||||
|
||||
bool Widget::readCurrentCommand()
|
||||
{
|
||||
if (!currentCommand)
|
||||
if (!currentItem)
|
||||
return false;
|
||||
if (currentCommand->read(xmlReader)) {
|
||||
if (currentItem->read(xmlReader)) {
|
||||
qDebug() << "setting to 0";
|
||||
currentCommand = 0;
|
||||
currentItem = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -65,11 +70,12 @@ void Widget::parseXml()
|
|||
while (!xmlReader.atEnd()) {
|
||||
xmlReader.readNext();
|
||||
if (xmlReader.isStartElement()) {
|
||||
QString cmdStr = xmlReader.name().toString();
|
||||
qDebug() << "parseXml: startElement: " << cmdStr;
|
||||
currentCommand = Command::getNewCommand(cmdStr);
|
||||
if (!currentCommand)
|
||||
qDebug() << "unrecognized command";
|
||||
QString itemType = xmlReader.name().toString();
|
||||
QString itemName = xmlReader.attributes().value("name").toString();
|
||||
qDebug() << "parseXml: startElement: " << "type =" << itemType << ", name =" << itemName;
|
||||
currentItem = ProtocolItem::getNewItem(itemType + itemName);
|
||||
if (!currentItem)
|
||||
qDebug() << "unrecognized item";
|
||||
readCurrentCommand();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
class QTextEdit;
|
||||
class QPushButton;
|
||||
class QBuffer;
|
||||
class Command;
|
||||
class ProtocolItem;
|
||||
|
||||
class Widget : public QMainWindow {
|
||||
Q_OBJECT
|
||||
|
@ -19,7 +19,7 @@ private:
|
|||
QXmlStreamReader xmlReader;
|
||||
QXmlStreamWriter xmlWriter;
|
||||
|
||||
Command *currentCommand;
|
||||
ProtocolItem *currentItem;
|
||||
bool readCurrentCommand();
|
||||
void parseBuffer();
|
||||
void parseXml();
|
||||
|
|
Loading…
Reference in a new issue