mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-11 16:44:48 -07:00
Merge branch 'devel' of git://github.com/mbruker/Cockatrice into devel
This commit is contained in:
commit
539b693ac4
60 changed files with 1399 additions and 993 deletions
|
|
@ -98,6 +98,8 @@ QString InnerDecklistNode::visibleNameFromName(const QString &_name)
|
|||
return QObject::tr("Maindeck");
|
||||
else if (_name == "side")
|
||||
return QObject::tr("Sideboard");
|
||||
else if (_name == "tokens")
|
||||
return QObject::tr("Tokens");
|
||||
else
|
||||
return _name;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,4 +19,5 @@ message ServerInfo_Game {
|
|||
optional uint32 spectators_count = 31;
|
||||
optional bool started = 50;
|
||||
optional uint32 start_time = 51;
|
||||
optional bool closed = 52;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
message ServerInfo_User {
|
||||
enum UserLevelFlags {
|
||||
IsNothing = 0;
|
||||
IsUser = 1;
|
||||
enum UserLevelFlag {
|
||||
IsNothing = 0;
|
||||
IsUser = 1;
|
||||
IsRegistered = 2;
|
||||
IsModerator = 4;
|
||||
IsAdmin = 8;
|
||||
|
|
|
|||
|
|
@ -294,7 +294,9 @@ void Server_Game::doStartGameIfReady()
|
|||
locker.unlock();
|
||||
|
||||
ServerInfo_Game gameInfo;
|
||||
getInfo(gameInfo);
|
||||
gameInfo.set_room_id(room->getId());
|
||||
gameInfo.set_game_id(gameId);
|
||||
gameInfo.set_started(true);
|
||||
emit gameInfoChanged(gameInfo);
|
||||
}
|
||||
|
||||
|
|
@ -327,6 +329,14 @@ void Server_Game::stopGameIfFinished()
|
|||
}
|
||||
|
||||
sendGameStateToPlayers();
|
||||
|
||||
locker.unlock();
|
||||
|
||||
ServerInfo_Game gameInfo;
|
||||
gameInfo.set_room_id(room->getId());
|
||||
gameInfo.set_game_id(gameId);
|
||||
gameInfo.set_started(false);
|
||||
emit gameInfoChanged(gameInfo);
|
||||
}
|
||||
|
||||
Response::ResponseCode Server_Game::checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions)
|
||||
|
|
@ -377,7 +387,7 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
|
|||
newPlayer->moveToThread(thread());
|
||||
|
||||
Event_Join joinEvent;
|
||||
joinEvent.mutable_player_properties()->CopyFrom(newPlayer->getProperties(true));
|
||||
newPlayer->getProperties(*joinEvent.mutable_player_properties(), true);
|
||||
sendGameEventContainer(prepareGameEvent(joinEvent, -1));
|
||||
|
||||
const QString playerName = QString::fromStdString(newPlayer->getUserInfo()->name());
|
||||
|
|
@ -393,7 +403,9 @@ void Server_Game::addPlayer(Server_AbstractUserInterface *userInterface, Respons
|
|||
|
||||
if (broadcastUpdate) {
|
||||
ServerInfo_Game gameInfo;
|
||||
getInfo(gameInfo);
|
||||
gameInfo.set_room_id(room->getId());
|
||||
gameInfo.set_game_id(gameId);
|
||||
gameInfo.set_player_count(getPlayerCount());
|
||||
emit gameInfoChanged(gameInfo);
|
||||
}
|
||||
|
||||
|
|
@ -421,9 +433,10 @@ void Server_Game::removePlayer(Server_Player *player)
|
|||
bool spectator = player->getSpectator();
|
||||
player->prepareDestroy();
|
||||
|
||||
if (!getPlayerCount())
|
||||
if (!getPlayerCount()) {
|
||||
deleteLater();
|
||||
else if (!spectator) {
|
||||
return;
|
||||
} else if (!spectator) {
|
||||
if (playerHost) {
|
||||
int newHostId = -1;
|
||||
QMapIterator<int, Server_Player *> playerIterator(players);
|
||||
|
|
@ -445,7 +458,9 @@ void Server_Game::removePlayer(Server_Player *player)
|
|||
}
|
||||
|
||||
ServerInfo_Game gameInfo;
|
||||
getInfo(gameInfo);
|
||||
gameInfo.set_room_id(room->getId());
|
||||
gameInfo.set_game_id(gameId);
|
||||
gameInfo.set_player_count(getPlayerCount());
|
||||
emit gameInfoChanged(gameInfo);
|
||||
}
|
||||
|
||||
|
|
@ -645,8 +660,10 @@ void Server_Game::getInfo(ServerInfo_Game &result) const
|
|||
QMutexLocker locker(&gameMutex);
|
||||
|
||||
result.set_room_id(room->getId());
|
||||
result.set_game_id(getGameId());
|
||||
if (!players.isEmpty()) {
|
||||
result.set_game_id(gameId);
|
||||
if (players.isEmpty())
|
||||
result.set_closed(true);
|
||||
else {
|
||||
for (int i = 0; i < gameTypes.size(); ++i)
|
||||
result.add_game_types(gameTypes[i]);
|
||||
|
||||
|
|
|
|||
|
|
@ -240,9 +240,8 @@ void Server_Player::clearZones()
|
|||
lastDrawList.clear();
|
||||
}
|
||||
|
||||
ServerInfo_PlayerProperties Server_Player::getProperties(bool withUserInfo)
|
||||
void Server_Player::getProperties(ServerInfo_PlayerProperties &result, bool withUserInfo)
|
||||
{
|
||||
ServerInfo_PlayerProperties result;
|
||||
result.set_player_id(playerId);
|
||||
if (withUserInfo)
|
||||
result.mutable_user_info()->CopyFrom(*userInfo);
|
||||
|
|
@ -253,8 +252,6 @@ ServerInfo_PlayerProperties Server_Player::getProperties(bool withUserInfo)
|
|||
if (deck)
|
||||
result.set_deck_hash(deck->getDeckHash().toStdString());
|
||||
result.set_ping_seconds(pingTime);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void Server_Player::addZone(Server_CardZone *zone)
|
||||
|
|
@ -1674,7 +1671,7 @@ void Server_Player::disconnectClient()
|
|||
|
||||
void Server_Player::getInfo(ServerInfo_Player *info, Server_Player *playerWhosAsking, bool omniscient, bool withUserInfo)
|
||||
{
|
||||
info->mutable_properties()->CopyFrom(getProperties(withUserInfo));
|
||||
getProperties(*info->mutable_properties(), withUserInfo);
|
||||
if (playerWhosAsking == this)
|
||||
if (deck)
|
||||
info->set_deck_list(deck->writeToString_Native().toStdString());
|
||||
|
|
|
|||
|
|
@ -105,7 +105,7 @@ public:
|
|||
|
||||
int getPingTime() const { return pingTime; }
|
||||
void setPingTime(int _pingTime) { pingTime = _pingTime; }
|
||||
ServerInfo_PlayerProperties getProperties(bool withUserInfo);
|
||||
void getProperties(ServerInfo_PlayerProperties &result, bool withUserInfo);
|
||||
|
||||
int newCardId();
|
||||
int newCounterId() const;
|
||||
|
|
|
|||
|
|
@ -422,7 +422,7 @@ Response::ResponseCode Server_ProtocolHandler::cmdGetGamesOfUser(const Command_G
|
|||
while (roomIterator.hasNext()) {
|
||||
Server_Room *room = roomIterator.next().value();
|
||||
room->gamesMutex.lock();
|
||||
re->add_room_list()->CopyFrom(room->getInfo(false, true));
|
||||
room->getInfo(*re->add_room_list(), false, true);
|
||||
QListIterator<ServerInfo_Game> gameIterator(room->getGamesOfUser(QString::fromStdString(cmd.user_name())));
|
||||
while (gameIterator.hasNext())
|
||||
re->add_game_list()->CopyFrom(gameIterator.next());
|
||||
|
|
@ -470,7 +470,7 @@ Response::ResponseCode Server_ProtocolHandler::cmdListRooms(const Command_ListRo
|
|||
Event_ListRooms event;
|
||||
QMapIterator<int, Server_Room *> roomIterator(server->getRooms());
|
||||
while (roomIterator.hasNext())
|
||||
event.add_room_list()->CopyFrom(roomIterator.next().value()->getInfo(false));
|
||||
roomIterator.next().value()->getInfo(*event.add_room_list(), false);
|
||||
rc.enqueuePreResponseItem(ServerMessage::SESSION_EVENT, prepareSessionEvent(event));
|
||||
|
||||
acceptsRoomListChanges = true;
|
||||
|
|
@ -498,7 +498,7 @@ Response::ResponseCode Server_ProtocolHandler::cmdJoinRoom(const Command_JoinRoo
|
|||
rc.enqueuePostResponseItem(ServerMessage::ROOM_EVENT, r->prepareRoomEvent(joinMessageEvent));
|
||||
|
||||
Response_JoinRoom *re = new Response_JoinRoom;
|
||||
re->mutable_room_info()->CopyFrom(r->getInfo(true));
|
||||
r->getInfo(*re->mutable_room_info(), true);
|
||||
|
||||
rc.setResponseExtension(re);
|
||||
return Response::RespOk;
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@
|
|||
#include "pb/event_leave_room.pb.h"
|
||||
#include "pb/event_list_games.pb.h"
|
||||
#include "pb/event_room_say.pb.h"
|
||||
#include "pb/serverinfo_room.pb.h"
|
||||
#include <google/protobuf/descriptor.h>
|
||||
|
||||
Server_Room::Server_Room(int _id, const QString &_name, const QString &_description, bool _autoJoin, const QString &_joinMessage, const QStringList &_gameTypes, Server *parent)
|
||||
|
|
@ -38,9 +39,8 @@ Server *Server_Room::getServer() const
|
|||
return static_cast<Server *>(parent());
|
||||
}
|
||||
|
||||
ServerInfo_Room Server_Room::getInfo(bool complete, bool showGameTypes, bool updating, bool includeExternalData) const
|
||||
const ServerInfo_Room &Server_Room::getInfo(ServerInfo_Room &result, bool complete, bool showGameTypes, bool updating, bool includeExternalData) const
|
||||
{
|
||||
ServerInfo_Room result;
|
||||
result.set_room_id(id);
|
||||
|
||||
if (!updating) {
|
||||
|
|
@ -104,7 +104,8 @@ void Server_Room::addClient(Server_ProtocolHandler *client)
|
|||
userList.append(client);
|
||||
usersLock.unlock();
|
||||
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
void Server_Room::removeClient(Server_ProtocolHandler *client)
|
||||
|
|
@ -117,7 +118,8 @@ void Server_Room::removeClient(Server_ProtocolHandler *client)
|
|||
event.set_name(client->getUserInfo()->name());
|
||||
sendRoomEvent(prepareRoomEvent(event));
|
||||
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
void Server_Room::addExternalUser(const ServerInfo_User &userInfo)
|
||||
|
|
@ -132,7 +134,8 @@ void Server_Room::addExternalUser(const ServerInfo_User &userInfo)
|
|||
externalUsers.insert(QString::fromStdString(userInfo.name()), userInfoContainer);
|
||||
usersLock.unlock();
|
||||
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
void Server_Room::removeExternalUser(const QString &name)
|
||||
|
|
@ -147,7 +150,8 @@ void Server_Room::removeExternalUser(const QString &name)
|
|||
event.set_name(name.toStdString());
|
||||
sendRoomEvent(prepareRoomEvent(event), false);
|
||||
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
void Server_Room::updateExternalGameList(const ServerInfo_Game &gameInfo)
|
||||
|
|
@ -161,7 +165,8 @@ void Server_Room::updateExternalGameList(const ServerInfo_Game &gameInfo)
|
|||
gamesMutex.unlock();
|
||||
|
||||
broadcastGameListUpdate(gameInfo, false);
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
Response::ResponseCode Server_Room::processJoinGameCommand(const Command_JoinGame &cmd, ResponseContainer &rc, Server_AbstractUserInterface *userInterface)
|
||||
|
|
@ -215,7 +220,7 @@ void Server_Room::sendRoomEvent(RoomEvent *event, bool sendToIsl)
|
|||
delete event;
|
||||
}
|
||||
|
||||
void Server_Room::broadcastGameListUpdate(ServerInfo_Game gameInfo, bool sendToIsl)
|
||||
void Server_Room::broadcastGameListUpdate(const ServerInfo_Game &gameInfo, bool sendToIsl)
|
||||
{
|
||||
Event_ListGames event;
|
||||
event.add_game_list()->CopyFrom(gameInfo);
|
||||
|
|
@ -236,7 +241,8 @@ void Server_Room::addGame(Server_Game *game)
|
|||
game->gameMutex.unlock();
|
||||
|
||||
emit gameListChanged(gameInfo);
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
void Server_Room::removeGame(Server_Game *game)
|
||||
|
|
@ -252,7 +258,8 @@ void Server_Room::removeGame(Server_Game *game)
|
|||
|
||||
games.remove(game->getGameId());
|
||||
|
||||
emit roomInfoChanged(getInfo(false, false, true));
|
||||
ServerInfo_Room roomInfo;
|
||||
emit roomInfoChanged(getInfo(roomInfo, false, false, true));
|
||||
}
|
||||
|
||||
int Server_Room::getGamesCreatedByUser(const QString &userName) const
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <QMutex>
|
||||
#include <QReadWriteLock>
|
||||
#include "serverinfo_user_container.h"
|
||||
#include "pb/serverinfo_room.pb.h"
|
||||
#include "pb/response.pb.h"
|
||||
|
||||
class Server_ProtocolHandler;
|
||||
|
|
@ -26,8 +25,8 @@ class Server_AbstractUserInterface;
|
|||
class Server_Room : public QObject {
|
||||
Q_OBJECT
|
||||
signals:
|
||||
void roomInfoChanged(ServerInfo_Room roomInfo);
|
||||
void gameListChanged(ServerInfo_Game gameInfo);
|
||||
void roomInfoChanged(const ServerInfo_Room &roomInfo);
|
||||
void gameListChanged(const ServerInfo_Game &gameInfo);
|
||||
private:
|
||||
int id;
|
||||
QString name;
|
||||
|
|
@ -40,7 +39,7 @@ private:
|
|||
QList<Server_ProtocolHandler *> userList;
|
||||
QMap<QString, ServerInfo_User_Container> externalUsers;
|
||||
private slots:
|
||||
void broadcastGameListUpdate(ServerInfo_Game gameInfo, bool sendToIsl = true);
|
||||
void broadcastGameListUpdate(const ServerInfo_Game &gameInfo, bool sendToIsl = true);
|
||||
public:
|
||||
mutable QReadWriteLock usersLock;
|
||||
mutable QMutex gamesMutex;
|
||||
|
|
@ -55,7 +54,7 @@ public:
|
|||
const QMap<int, Server_Game *> &getGames() const { return games; }
|
||||
const QMap<int, ServerInfo_Game> &getExternalGames() const { return externalGames; }
|
||||
Server *getServer() const;
|
||||
ServerInfo_Room getInfo(bool complete, bool showGameTypes = false, bool updating = false, bool includeExternalData = true) const;
|
||||
const ServerInfo_Room &getInfo(ServerInfo_Room &result, bool complete, bool showGameTypes = false, bool updating = false, bool includeExternalData = true) const;
|
||||
int getGamesCreatedByUser(const QString &name) const;
|
||||
QList<ServerInfo_Game> getGamesOfUser(const QString &name) const;
|
||||
|
||||
|
|
|
|||
10
common/user_level.h
Normal file
10
common/user_level.h
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
#ifndef USER_LEVEL_H
|
||||
#define USER_LEVEL_H
|
||||
|
||||
#include "pb/serverinfo_user.pb.h"
|
||||
#include <QFlags>
|
||||
|
||||
Q_DECLARE_FLAGS(UserLevelFlags, ServerInfo_User::UserLevelFlag)
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS(UserLevelFlags)
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue