more buddy&ignore code, added missing file

This commit is contained in:
Max-Wilhelm Bruker 2011-03-01 20:49:36 +01:00
parent 9e34c9c985
commit 4149f78001
18 changed files with 459 additions and 141 deletions

View file

@ -53,6 +53,7 @@ void ProtocolItem::initializeHash()
registerSerializableItem("room_eventlist_games", Event_ListGames::newItem);
registerSerializableItem("room_eventjoin_room", Event_JoinRoom::newItem);
registerSerializableItem("generic_eventadd_to_list", Event_AddToList::newItem);
registerSerializableItem("generic_eventuser_joined", Event_UserJoined::newItem);
registerSerializableItem("generic_eventlist_rooms", Event_ListRooms::newItem);
registerSerializableItem("game_eventjoin", Event_Join::newItem);
@ -253,6 +254,7 @@ void ProtocolResponse::initializeHash()
{
responseHash.insert(QString(), RespNothing);
responseHash.insert("ok", RespOk);
responseHash.insert("internal_error", RespInternalError);
responseHash.insert("invalid_command", RespInvalidCommand);
responseHash.insert("name_not_found", RespNameNotFound);
responseHash.insert("login_needed", RespLoginNeeded);
@ -376,6 +378,15 @@ Event_ListGames::Event_ListGames(int _roomId, const QList<ServerInfo_Game *> &_g
itemList.append(_gameList[i]);
}
Event_AddToList::Event_AddToList(const QString &_list, ServerInfo_User *_userInfo)
: GenericEvent("add_to_list")
{
if (!_userInfo)
_userInfo = new ServerInfo_User;
insertItem(_userInfo);
insertItem(new SerializableItem_String("list", _list));
}
Event_UserJoined::Event_UserJoined(ServerInfo_User *_userInfo)
: GenericEvent("user_joined")
{

View file

@ -40,6 +40,7 @@ enum ItemId {
ItemId_Event_RevealCards = ItemId_Other + 210,
ItemId_Event_Join = ItemId_Other + 211,
ItemId_Event_Ping = ItemId_Other + 212,
ItemId_Event_AddToList = ItemId_Other + 213,
ItemId_Response_ListUsers = ItemId_Other + 300,
ItemId_Response_GetUserInfo = ItemId_Other + 301,
ItemId_Response_DeckList = ItemId_Other + 302,
@ -407,6 +408,16 @@ public:
QList<ServerInfo_Game *> getGameList() const { return typecastItemList<ServerInfo_Game *>(); }
};
class Event_AddToList : public GenericEvent {
Q_OBJECT
public:
Event_AddToList(const QString &_list = QString(), ServerInfo_User *_userInfo = 0);
int getItemId() const { return ItemId_Event_AddToList; }
static SerializableItem *newItem() { return new Event_AddToList; }
ServerInfo_User *getUserInfo() const { return static_cast<ServerInfo_User *>(itemMap.value("user")); }
QString getList() const { return static_cast<SerializableItem_String *>(itemMap.value("list"))->getData(); }
};
class Event_UserJoined : public GenericEvent {
Q_OBJECT
public:

View file

@ -8,7 +8,7 @@
class DeckList;
enum ResponseCode { RespNothing, RespOk, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespFunctionNotAllowed, RespGameNotStarted, RespGameFull, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed, RespOnlyBuddies, RespUserLevelTooLow };
enum ResponseCode { RespNothing, RespOk, RespInternalError, RespInvalidCommand, RespInvalidData, RespNameNotFound, RespLoginNeeded, RespFunctionNotAllowed, RespGameNotStarted, RespGameFull, RespContextError, RespWrongPassword, RespSpectatorsNotAllowed, RespOnlyBuddies, RespUserLevelTooLow };
// PrivateZone: Contents of the zone are always visible to the owner,
// but not to anyone else.

View file

@ -4,76 +4,75 @@ ItemId_Command_Login = 1002,
ItemId_Command_Message = 1003,
ItemId_Command_ListUsers = 1004,
ItemId_Command_GetUserInfo = 1005,
ItemId_Command_AddBuddy = 1006,
ItemId_Command_RemoveBuddy = 1007,
ItemId_Command_AddIgnore = 1008,
ItemId_Command_RemoveIgnore = 1009,
ItemId_Command_DeckList = 1010,
ItemId_Command_DeckNewDir = 1011,
ItemId_Command_DeckDelDir = 1012,
ItemId_Command_DeckDel = 1013,
ItemId_Command_DeckDownload = 1014,
ItemId_Command_ListRooms = 1015,
ItemId_Command_JoinRoom = 1016,
ItemId_Command_LeaveRoom = 1017,
ItemId_Command_RoomSay = 1018,
ItemId_Command_JoinGame = 1019,
ItemId_Command_LeaveGame = 1020,
ItemId_Command_Say = 1021,
ItemId_Command_Shuffle = 1022,
ItemId_Command_Mulligan = 1023,
ItemId_Command_RollDie = 1024,
ItemId_Command_DrawCards = 1025,
ItemId_Command_UndoDraw = 1026,
ItemId_Command_FlipCard = 1027,
ItemId_Command_AttachCard = 1028,
ItemId_Command_CreateToken = 1029,
ItemId_Command_CreateArrow = 1030,
ItemId_Command_DeleteArrow = 1031,
ItemId_Command_SetCardAttr = 1032,
ItemId_Command_SetCardCounter = 1033,
ItemId_Command_IncCardCounter = 1034,
ItemId_Command_ReadyStart = 1035,
ItemId_Command_Concede = 1036,
ItemId_Command_IncCounter = 1037,
ItemId_Command_CreateCounter = 1038,
ItemId_Command_SetCounter = 1039,
ItemId_Command_DelCounter = 1040,
ItemId_Command_NextTurn = 1041,
ItemId_Command_SetActivePhase = 1042,
ItemId_Command_DumpZone = 1043,
ItemId_Command_StopDumpZone = 1044,
ItemId_Command_RevealCards = 1045,
ItemId_Event_Say = 1046,
ItemId_Event_Leave = 1047,
ItemId_Event_GameClosed = 1048,
ItemId_Event_Shuffle = 1049,
ItemId_Event_RollDie = 1050,
ItemId_Event_MoveCard = 1051,
ItemId_Event_FlipCard = 1052,
ItemId_Event_DestroyCard = 1053,
ItemId_Event_AttachCard = 1054,
ItemId_Event_CreateToken = 1055,
ItemId_Event_DeleteArrow = 1056,
ItemId_Event_SetCardAttr = 1057,
ItemId_Event_SetCardCounter = 1058,
ItemId_Event_SetCounter = 1059,
ItemId_Event_DelCounter = 1060,
ItemId_Event_SetActivePlayer = 1061,
ItemId_Event_SetActivePhase = 1062,
ItemId_Event_DumpZone = 1063,
ItemId_Event_StopDumpZone = 1064,
ItemId_Event_ServerMessage = 1065,
ItemId_Event_Message = 1066,
ItemId_Event_GameJoined = 1067,
ItemId_Event_UserLeft = 1068,
ItemId_Event_LeaveRoom = 1069,
ItemId_Event_RoomSay = 1070,
ItemId_Context_ReadyStart = 1071,
ItemId_Context_Concede = 1072,
ItemId_Context_DeckSelect = 1073,
ItemId_Context_UndoDraw = 1074,
ItemId_Context_MoveCard = 1075,
ItemId_Command_UpdateServerMessage = 1076,
ItemId_Other = 1077
ItemId_Command_AddToList = 1006,
ItemId_Command_RemoveFromList = 1007,
ItemId_Command_DeckList = 1008,
ItemId_Command_DeckNewDir = 1009,
ItemId_Command_DeckDelDir = 1010,
ItemId_Command_DeckDel = 1011,
ItemId_Command_DeckDownload = 1012,
ItemId_Command_ListRooms = 1013,
ItemId_Command_JoinRoom = 1014,
ItemId_Command_LeaveRoom = 1015,
ItemId_Command_RoomSay = 1016,
ItemId_Command_JoinGame = 1017,
ItemId_Command_LeaveGame = 1018,
ItemId_Command_Say = 1019,
ItemId_Command_Shuffle = 1020,
ItemId_Command_Mulligan = 1021,
ItemId_Command_RollDie = 1022,
ItemId_Command_DrawCards = 1023,
ItemId_Command_UndoDraw = 1024,
ItemId_Command_FlipCard = 1025,
ItemId_Command_AttachCard = 1026,
ItemId_Command_CreateToken = 1027,
ItemId_Command_CreateArrow = 1028,
ItemId_Command_DeleteArrow = 1029,
ItemId_Command_SetCardAttr = 1030,
ItemId_Command_SetCardCounter = 1031,
ItemId_Command_IncCardCounter = 1032,
ItemId_Command_ReadyStart = 1033,
ItemId_Command_Concede = 1034,
ItemId_Command_IncCounter = 1035,
ItemId_Command_CreateCounter = 1036,
ItemId_Command_SetCounter = 1037,
ItemId_Command_DelCounter = 1038,
ItemId_Command_NextTurn = 1039,
ItemId_Command_SetActivePhase = 1040,
ItemId_Command_DumpZone = 1041,
ItemId_Command_StopDumpZone = 1042,
ItemId_Command_RevealCards = 1043,
ItemId_Event_Say = 1044,
ItemId_Event_Leave = 1045,
ItemId_Event_GameClosed = 1046,
ItemId_Event_Shuffle = 1047,
ItemId_Event_RollDie = 1048,
ItemId_Event_MoveCard = 1049,
ItemId_Event_FlipCard = 1050,
ItemId_Event_DestroyCard = 1051,
ItemId_Event_AttachCard = 1052,
ItemId_Event_CreateToken = 1053,
ItemId_Event_DeleteArrow = 1054,
ItemId_Event_SetCardAttr = 1055,
ItemId_Event_SetCardCounter = 1056,
ItemId_Event_SetCounter = 1057,
ItemId_Event_DelCounter = 1058,
ItemId_Event_SetActivePlayer = 1059,
ItemId_Event_SetActivePhase = 1060,
ItemId_Event_DumpZone = 1061,
ItemId_Event_StopDumpZone = 1062,
ItemId_Event_RemoveFromList = 1063,
ItemId_Event_ServerMessage = 1064,
ItemId_Event_Message = 1065,
ItemId_Event_GameJoined = 1066,
ItemId_Event_UserLeft = 1067,
ItemId_Event_LeaveRoom = 1068,
ItemId_Event_RoomSay = 1069,
ItemId_Context_ReadyStart = 1070,
ItemId_Context_Concede = 1071,
ItemId_Context_DeckSelect = 1072,
ItemId_Context_UndoDraw = 1073,
ItemId_Context_MoveCard = 1074,
ItemId_Command_UpdateServerMessage = 1075,
ItemId_Other = 1076
};

View file

@ -26,24 +26,16 @@ Command_GetUserInfo::Command_GetUserInfo(const QString &_userName)
{
insertItem(new SerializableItem_String("user_name", _userName));
}
Command_AddBuddy::Command_AddBuddy(const QString &_userName)
: Command("add_buddy")
Command_AddToList::Command_AddToList(const QString &_list, const QString &_userName)
: Command("add_to_list")
{
insertItem(new SerializableItem_String("list", _list));
insertItem(new SerializableItem_String("user_name", _userName));
}
Command_RemoveBuddy::Command_RemoveBuddy(const QString &_userName)
: Command("remove_buddy")
{
insertItem(new SerializableItem_String("user_name", _userName));
}
Command_AddIgnore::Command_AddIgnore(const QString &_userName)
: Command("add_ignore")
{
insertItem(new SerializableItem_String("user_name", _userName));
}
Command_RemoveIgnore::Command_RemoveIgnore(const QString &_userName)
: Command("remove_ignore")
Command_RemoveFromList::Command_RemoveFromList(const QString &_list, const QString &_userName)
: Command("remove_from_list")
{
insertItem(new SerializableItem_String("list", _list));
insertItem(new SerializableItem_String("user_name", _userName));
}
Command_DeckList::Command_DeckList()
@ -386,6 +378,12 @@ Event_StopDumpZone::Event_StopDumpZone(int _playerId, int _zoneOwnerId, const QS
insertItem(new SerializableItem_Int("zone_owner_id", _zoneOwnerId));
insertItem(new SerializableItem_String("zone", _zone));
}
Event_RemoveFromList::Event_RemoveFromList(const QString &_list, const QString &_userName)
: GenericEvent("remove_from_list")
{
insertItem(new SerializableItem_String("list", _list));
insertItem(new SerializableItem_String("user_name", _userName));
}
Event_ServerMessage::Event_ServerMessage(const QString &_message)
: GenericEvent("server_message")
{
@ -457,10 +455,8 @@ void ProtocolItem::initializeHashAuto()
itemNameHash.insert("cmdmessage", Command_Message::newItem);
itemNameHash.insert("cmdlist_users", Command_ListUsers::newItem);
itemNameHash.insert("cmdget_user_info", Command_GetUserInfo::newItem);
itemNameHash.insert("cmdadd_buddy", Command_AddBuddy::newItem);
itemNameHash.insert("cmdremove_buddy", Command_RemoveBuddy::newItem);
itemNameHash.insert("cmdadd_ignore", Command_AddIgnore::newItem);
itemNameHash.insert("cmdremove_ignore", Command_RemoveIgnore::newItem);
itemNameHash.insert("cmdadd_to_list", Command_AddToList::newItem);
itemNameHash.insert("cmdremove_from_list", Command_RemoveFromList::newItem);
itemNameHash.insert("cmddeck_list", Command_DeckList::newItem);
itemNameHash.insert("cmddeck_new_dir", Command_DeckNewDir::newItem);
itemNameHash.insert("cmddeck_del_dir", Command_DeckDelDir::newItem);
@ -516,6 +512,7 @@ void ProtocolItem::initializeHashAuto()
itemNameHash.insert("game_eventset_active_phase", Event_SetActivePhase::newItem);
itemNameHash.insert("game_eventdump_zone", Event_DumpZone::newItem);
itemNameHash.insert("game_eventstop_dump_zone", Event_StopDumpZone::newItem);
itemNameHash.insert("generic_eventremove_from_list", Event_RemoveFromList::newItem);
itemNameHash.insert("generic_eventserver_message", Event_ServerMessage::newItem);
itemNameHash.insert("generic_eventmessage", Event_Message::newItem);
itemNameHash.insert("generic_eventgame_joined", Event_GameJoined::newItem);

View file

@ -3,10 +3,8 @@
0:message:s,user_name:s,text
0:list_users
0:get_user_info:s,user_name
0:add_buddy:s,user_name
0:remove_buddy:s,user_name
0:add_ignore:s,user_name
0:remove_ignore:s,user_name
0:add_to_list:s,list:s,user_name
0:remove_from_list:s,list:s,user_name
0:deck_list
0:deck_new_dir:s,path:s,dir_name
0:deck_del_dir:s,path
@ -62,6 +60,7 @@
3:set_active_phase:i,phase
3:dump_zone:i,zone_owner_id:s,zone:i,number_cards
3:stop_dump_zone:i,zone_owner_id:s,zone
4:remove_from_list:s,list:s,user_name
4:server_message:s,message
4:message:s,sender_name:s,receiver_name:s,text
4:game_joined:i,game_id:s,game_description:i,player_id:b,spectator:b,spectators_can_talk:b,spectators_see_everything:b,resuming

View file

@ -43,37 +43,23 @@ public:
static SerializableItem *newItem() { return new Command_GetUserInfo; }
int getItemId() const { return ItemId_Command_GetUserInfo; }
};
class Command_AddBuddy : public Command {
class Command_AddToList : public Command {
Q_OBJECT
public:
Command_AddBuddy(const QString &_userName = QString());
Command_AddToList(const QString &_list = QString(), const QString &_userName = QString());
QString getList() const { return static_cast<SerializableItem_String *>(itemMap.value("list"))->getData(); };
QString getUserName() const { return static_cast<SerializableItem_String *>(itemMap.value("user_name"))->getData(); };
static SerializableItem *newItem() { return new Command_AddBuddy; }
int getItemId() const { return ItemId_Command_AddBuddy; }
static SerializableItem *newItem() { return new Command_AddToList; }
int getItemId() const { return ItemId_Command_AddToList; }
};
class Command_RemoveBuddy : public Command {
class Command_RemoveFromList : public Command {
Q_OBJECT
public:
Command_RemoveBuddy(const QString &_userName = QString());
Command_RemoveFromList(const QString &_list = QString(), const QString &_userName = QString());
QString getList() const { return static_cast<SerializableItem_String *>(itemMap.value("list"))->getData(); };
QString getUserName() const { return static_cast<SerializableItem_String *>(itemMap.value("user_name"))->getData(); };
static SerializableItem *newItem() { return new Command_RemoveBuddy; }
int getItemId() const { return ItemId_Command_RemoveBuddy; }
};
class Command_AddIgnore : public Command {
Q_OBJECT
public:
Command_AddIgnore(const QString &_userName = QString());
QString getUserName() const { return static_cast<SerializableItem_String *>(itemMap.value("user_name"))->getData(); };
static SerializableItem *newItem() { return new Command_AddIgnore; }
int getItemId() const { return ItemId_Command_AddIgnore; }
};
class Command_RemoveIgnore : public Command {
Q_OBJECT
public:
Command_RemoveIgnore(const QString &_userName = QString());
QString getUserName() const { return static_cast<SerializableItem_String *>(itemMap.value("user_name"))->getData(); };
static SerializableItem *newItem() { return new Command_RemoveIgnore; }
int getItemId() const { return ItemId_Command_RemoveIgnore; }
static SerializableItem *newItem() { return new Command_RemoveFromList; }
int getItemId() const { return ItemId_Command_RemoveFromList; }
};
class Command_DeckList : public Command {
Q_OBJECT
@ -580,6 +566,15 @@ public:
static SerializableItem *newItem() { return new Event_StopDumpZone; }
int getItemId() const { return ItemId_Event_StopDumpZone; }
};
class Event_RemoveFromList : public GenericEvent {
Q_OBJECT
public:
Event_RemoveFromList(const QString &_list = QString(), const QString &_userName = QString());
QString getList() const { return static_cast<SerializableItem_String *>(itemMap.value("list"))->getData(); };
QString getUserName() const { return static_cast<SerializableItem_String *>(itemMap.value("user_name"))->getData(); };
static SerializableItem *newItem() { return new Event_RemoveFromList; }
int getItemId() const { return ItemId_Event_RemoveFromList; }
};
class Event_ServerMessage : public GenericEvent {
Q_OBJECT
public:

View file

@ -42,10 +42,12 @@ Server_ProtocolHandler::~Server_ProtocolHandler()
}
delete userInfo;
for (int i = 0; i < buddyList.size(); ++i)
delete buddyList[i];
for (int i = 0; i < ignoreList.size(); ++i)
delete ignoreList[i];
QMapIterator<QString, ServerInfo_User *> i(buddyList);
while (i.hasNext())
delete i.next().value();
QMapIterator<QString, ServerInfo_User *> j(ignoreList);
while (i.hasNext())
delete i.next().value();
}
void Server_ProtocolHandler::playerRemovedFromGame(Server_Game *game)
@ -138,6 +140,8 @@ ResponseCode Server_ProtocolHandler::processCommandHelper(Command *command, Comm
case ItemId_Command_Ping: return cmdPing(static_cast<Command_Ping *>(command), cont);
case ItemId_Command_Login: return cmdLogin(static_cast<Command_Login *>(command), cont);
case ItemId_Command_Message: return cmdMessage(static_cast<Command_Message *>(command), cont);
case ItemId_Command_AddToList: return cmdAddToList(static_cast<Command_AddToList *>(command), cont);
case ItemId_Command_RemoveFromList: return cmdRemoveFromList(static_cast<Command_RemoveFromList *>(command), cont);
case ItemId_Command_DeckList: return cmdDeckList(static_cast<Command_DeckList *>(command), cont);
case ItemId_Command_DeckNewDir: return cmdDeckNewDir(static_cast<Command_DeckNewDir *>(command), cont);
case ItemId_Command_DeckDelDir: return cmdDeckDelDir(static_cast<Command_DeckDelDir *>(command), cont);
@ -237,8 +241,12 @@ ResponseCode Server_ProtocolHandler::cmdLogin(Command_Login *cmd, CommandContain
enqueueProtocolItem(new Event_ServerMessage(server->getLoginMessage()));
if (authState == PasswordRight) {
buddyList = server->getBuddyList(userInfo->getName());
ignoreList = server->getIgnoreList(userInfo->getName());
QList<ServerInfo_User *> _buddyList = server->getBuddyList(userInfo->getName());
for (int i = 0; i < _buddyList.size(); ++i)
buddyList.insert(_buddyList[i]->getName(), _buddyList[i]);
QList<ServerInfo_User *> _ignoreList = server->getIgnoreList(userInfo->getName());
for (int i = 0; i < _ignoreList.size(); ++i)
ignoreList.insert(_ignoreList[i]->getName(), _ignoreList[i]);
// This might not scale very well. Use an extra QMap if it becomes a problem.
const QList<Server_Game *> &serverGames = server->getGames();
@ -256,11 +264,13 @@ ResponseCode Server_ProtocolHandler::cmdLogin(Command_Login *cmd, CommandContain
}
QList<ServerInfo_User *> _buddyList;
for (int i = 0; i < buddyList.size(); ++i)
_buddyList.append(new ServerInfo_User(buddyList[i]));
QMapIterator<QString, ServerInfo_User *> buddyIterator(buddyList);
while (buddyIterator.hasNext())
_buddyList.append(new ServerInfo_User(buddyIterator.next().value()));
QList<ServerInfo_User *> _ignoreList;
for (int i = 0; i < ignoreList.size(); ++i)
_ignoreList.append(new ServerInfo_User(ignoreList[i]));
QMapIterator<QString, ServerInfo_User *> ignoreIterator(ignoreList);
while (ignoreIterator.hasNext())
_ignoreList.append(new ServerInfo_User(ignoreIterator.next().value()));
cont->setResponse(new Response_Login(cont->getCmdId(), RespOk, new ServerInfo_User(userInfo, true), _buddyList, _ignoreList));
return RespNothing;

View file

@ -27,7 +27,7 @@ protected:
bool acceptsUserListChanges;
bool acceptsRoomListChanges;
ServerInfo_User *userInfo;
QList<ServerInfo_User *> buddyList, ignoreList;
QMap<QString, ServerInfo_User *> buddyList, ignoreList;
private:
QList<ProtocolItem *> itemQueue;
QDateTime lastCommandTime;
@ -38,6 +38,8 @@ private:
ResponseCode cmdPing(Command_Ping *cmd, CommandContainer *cont);
ResponseCode cmdLogin(Command_Login *cmd, CommandContainer *cont);
ResponseCode cmdMessage(Command_Message *cmd, CommandContainer *cont);
virtual ResponseCode cmdAddToList(Command_AddToList *cmd, CommandContainer *cont) = 0;
virtual ResponseCode cmdRemoveFromList(Command_RemoveFromList *cmd, CommandContainer *cont) = 0;
virtual ResponseCode cmdDeckList(Command_DeckList *cmd, CommandContainer *cont) = 0;
virtual ResponseCode cmdDeckNewDir(Command_DeckNewDir *cmd, CommandContainer *cont) = 0;
virtual ResponseCode cmdDeckDelDir(Command_DeckDelDir *cmd, CommandContainer *cont) = 0;
@ -95,8 +97,8 @@ public:
bool getAcceptsRoomListChanges() const { return acceptsRoomListChanges; }
ServerInfo_User *getUserInfo() const { return userInfo; }
void setUserInfo(ServerInfo_User *_userInfo) { userInfo = _userInfo; }
const QList<ServerInfo_User *> &getBuddyList() const { return buddyList; }
const QList<ServerInfo_User *> &getIgnoreList() const { return ignoreList; }
const QMap<QString, ServerInfo_User *> &getBuddyList() const { return buddyList; }
const QMap<QString, ServerInfo_User *> &getIgnoreList() const { return ignoreList; }
const QDateTime &getLastCommandTime() const { return lastCommandTime; }
void processCommandContainer(CommandContainer *cont);