Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
server_game.h
Go to the documentation of this file.
1/***************************************************************************
2 * Copyright (C) 2008 by Max-Wilhelm Bruker *
3 * brukie@laptop *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
20#ifndef SERVERGAME_H
21#define SERVERGAME_H
22
24
25#include <QDateTime>
26#include <QMap>
27#include <QMutex>
28#include <QObject>
29#include <QSet>
30#include <QStringList>
31#include <libcockatrice/protocol/pb/event_leave.pb.h>
32#include <libcockatrice/protocol/pb/response.pb.h>
33#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
34
35class QTimer;
36class GameEventContainer;
37class GameReplay;
38class Server_Room;
41class ServerInfo_User;
42class ServerInfo_Game;
44class Event_GameStateChanged;
45
46class Server_Game : public QObject
47{
48 Q_OBJECT
49private:
52 int hostId;
53 ServerInfo_User *creatorInfo;
54 QMap<int, Server_AbstractParticipant *> participants;
58 int gameId;
59 QString description;
60 QString password;
62 QList<int> gameTypes;
75 QDateTime startTime;
76 QTimer *pingClock;
77 QList<GameReplay *> replayList;
78 GameReplay *currentReplay;
79
80 void createGameStateChangedEvent(Event_GameStateChanged *event,
82 bool omniscient,
83 bool withUserInfo);
85signals:
86 void sigStartGameIfReady(bool override);
87 void gameInfoChanged(ServerInfo_Game gameInfo);
88private slots:
89 void pingClockTimeout();
90 void doStartGameIfReady(bool forceStartGame = false);
91
92public:
93#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
94 mutable QRecursiveMutex gameMutex;
95#else
96 mutable QMutex gameMutex;
97#endif
98 Server_Game(const ServerInfo_User &_creatorInfo,
99 int _gameId,
100 const QString &_description,
101 const QString &_password,
102 int _maxPlayers,
103 const QList<int> &_gameTypes,
104 bool _onlyBuddies,
105 bool _onlyRegistered,
106 bool _spectatorsAllowed,
107 bool _spectatorsNeedPassword,
108 bool _spectatorsCanTalk,
109 bool _spectatorsSeeEverything,
110 int _startingLifeTotal,
111 bool _shareDecklistsOnLoad,
112 Server_Room *parent);
113 ~Server_Game() override;
115 {
116 return room;
117 }
118 void getInfo(ServerInfo_Game &result) const;
119 int getHostId() const
120 {
121 return hostId;
122 }
123 ServerInfo_User *getCreatorInfo() const
124 {
125 return creatorInfo;
126 }
127 bool getGameStarted() const
128 {
129 return gameStarted;
130 }
131 int getPlayerCount() const;
132 int getSpectatorCount() const;
133 QMap<int, Server_AbstractPlayer *> getPlayers() const;
134 Server_AbstractPlayer *getPlayer(int id) const;
135 const QMap<int, Server_AbstractParticipant *> &getParticipants() const
136 {
137 return participants;
138 }
139 int getGameId() const
140 {
141 return gameId;
142 }
143 QString getDescription() const
144 {
145 return description;
146 }
147 QString getPassword() const
148 {
149 return password;
150 }
151 int getMaxPlayers() const
152 {
153 return maxPlayers;
154 }
156 {
157 return spectatorsAllowed;
158 }
160 {
162 }
164 {
165 return spectatorsCanTalk;
166 }
168 {
170 }
172 {
173 return startingLifeTotal;
174 }
176 {
178 }
179 Response::ResponseCode
180 checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge);
181 bool containsUser(const QString &userName) const;
182 void addPlayer(Server_AbstractUserInterface *userInterface,
184 bool spectator,
185 bool judge,
186 bool broadcastUpdate = true);
187 void removeParticipant(Server_AbstractParticipant *participant, Event_Leave::LeaveReason reason);
190 bool kickParticipant(int playerId);
191 void startGameIfReady(bool forceStartGame);
192 void stopGameIfFinished();
193 int getActivePlayer() const
194 {
195 return activePlayer;
196 }
197 int getActivePhase() const
198 {
199 return activePhase;
200 }
201 void setActivePlayer(int newPlayer);
202 void setActivePhase(int newPhase);
203 void removeArrows(int newPhase, bool force = false);
204 void nextTurn();
206 {
207 return secondsElapsed;
208 }
210 {
212 }
213
214 void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming);
215
216 GameEventContainer *
217 prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context = 0);
218 GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext);
219
221 void sendGameEventContainer(GameEventContainer *cont,
222 GameEventStorageItem::EventRecipients recipients = GameEventStorageItem::SendToPrivate |
224 int privatePlayerId = -1);
225};
226
227#endif
@ SendToPrivate
Definition server_response_containers.h:22
@ SendToOthers
Definition server_response_containers.h:23
Definition server_response_containers.h:46
Definition server_response_containers.h:89
Definition server_abstract_participant.h:57
Definition server_abstract_player.h:19
Definition server_abstractuserinterface.h:20
int getActivePlayer() const
Definition server_game.h:193
QList< int > gameTypes
Definition server_game.h:62
void sendGameStateToPlayers()
Definition server_game.cpp:281
void stopGameIfFinished()
Definition server_game.cpp:393
int startTimeOfThisGame
Definition server_game.h:72
bool gameClosed
Definition server_game.h:57
void removeArrows(int newPhase, bool force=false)
Definition server_game.cpp:678
void gameInfoChanged(ServerInfo_Game gameInfo)
bool getSpectatorsNeedPassword() const
Definition server_game.h:159
QTimer * pingClock
Definition server_game.h:76
void storeGameInformation()
Definition server_game.cpp:137
ServerInfo_User * creatorInfo
Definition server_game.h:53
bool firstGameStarted
Definition server_game.h:73
int maxPlayers
Definition server_game.h:61
bool gameStarted
Definition server_game.h:56
bool onlyRegistered
Definition server_game.h:64
void startGameIfReady(bool forceStartGame)
Definition server_game.cpp:388
void sendGameEventContainer(GameEventContainer *cont, GameEventStorageItem::EventRecipients recipients=GameEventStorageItem::SendToPrivate|GameEventStorageItem::SendToOthers, int privatePlayerId=-1)
Definition server_game.cpp:762
GameEventContainer * prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context=0)
Definition server_game.cpp:787
int getSpectatorCount() const
Definition server_game.cpp:251
bool containsUser(const QString &userName) const
Definition server_game.cpp:462
bool getSpectatorsSeeEverything() const
Definition server_game.h:167
void setActivePhase(int newPhase)
Definition server_game.cpp:666
QMap< int, Server_AbstractParticipant * > participants
Definition server_game.h:54
void nextTurn()
Definition server_game.cpp:695
QDateTime startTime
Definition server_game.h:75
QList< GameReplay * > replayList
Definition server_game.h:77
bool turnOrderReversed
Definition server_game.h:74
bool getShareDecklistsOnLoad() const
Definition server_game.h:175
const QMap< int, Server_AbstractParticipant * > & getParticipants() const
Definition server_game.h:135
QMap< int, Server_AbstractPlayer * > getPlayers() const
Definition server_game.cpp:223
bool spectatorsSeeEverything
Definition server_game.h:68
int startingLifeTotal
Definition server_game.h:69
Response::ResponseCode checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge)
Definition server_game.cpp:424
void getInfo(ServerInfo_Game &result) const
Definition server_game.cpp:802
void removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:580
~Server_Game() override
Definition server_game.cpp:97
bool onlyBuddies
Definition server_game.h:64
Server_Room * room
Definition server_game.h:50
bool getSpectatorsCanTalk() const
Definition server_game.h:163
Server_Game(const ServerInfo_User &_creatorInfo, int _gameId, const QString &_description, const QString &_password, int _maxPlayers, const QList< int > &_gameTypes, bool _onlyBuddies, bool _onlyRegistered, bool _spectatorsAllowed, bool _spectatorsNeedPassword, bool _spectatorsCanTalk, bool _spectatorsSeeEverything, int _startingLifeTotal, bool _shareDecklistsOnLoad, Server_Room *parent)
Definition server_game.cpp:53
QString description
Definition server_game.h:59
int secondsElapsed
Definition server_game.h:72
QSet< QString > allSpectatorsEver
Definition server_game.h:55
bool shareDecklistsOnLoad
Definition server_game.h:70
bool kickParticipant(int playerId)
Definition server_game.cpp:634
bool getSpectatorsAllowed() const
Definition server_game.h:155
bool spectatorsAllowed
Definition server_game.h:65
void removeParticipant(Server_AbstractParticipant *participant, Event_Leave::LeaveReason reason)
Definition server_game.cpp:528
bool spectatorsNeedPassword
Definition server_game.h:66
QRecursiveMutex gameMutex
Definition server_game.h:94
void sigStartGameIfReady(bool override)
Server_AbstractPlayer * getPlayer(int id) const
Definition server_game.cpp:236
QString password
Definition server_game.h:60
int getSecondsElapsed() const
Definition server_game.h:205
ServerInfo_User * getCreatorInfo() const
Definition server_game.h:123
int activePhase
Definition server_game.h:63
Server_Room * getRoom() const
Definition server_game.h:114
int getPlayerCount() const
Definition server_game.cpp:246
int getStartingLifeTotal() const
Definition server_game.h:171
void setActivePlayer(int newPlayer)
Definition server_game.cpp:651
void doStartGameIfReady(bool forceStartGame=false)
Definition server_game.cpp:319
int getActivePhase() const
Definition server_game.h:197
bool spectatorsCanTalk
Definition server_game.h:67
GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext)
bool getGameStarted() const
Definition server_game.h:127
int nextPlayerId
Definition server_game.h:51
void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming)
Definition server_game.cpp:727
int hostId
Definition server_game.h:52
QString getDescription() const
Definition server_game.h:143
int gameId
Definition server_game.h:58
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool judge, bool broadcastUpdate=true)
Definition server_game.cpp:473
QSet< QString > allPlayersEver
Definition server_game.h:55
int getGameId() const
Definition server_game.h:139
void pingClockTimeout()
Definition server_game.cpp:182
int activePlayer
Definition server_game.h:63
void createGameStateChangedEvent(Event_GameStateChanged *event, Server_AbstractParticipant *recipient, bool omniscient, bool withUserInfo)
Definition server_game.cpp:263
bool reverseTurnOrder()
Definition server_game.h:209
GameReplay * currentReplay
Definition server_game.h:78
int inactivityCounter
Definition server_game.h:71
int getMaxPlayers() const
Definition server_game.h:151
int getHostId() const
Definition server_game.h:119
void unattachCards(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:612
QString getPassword() const
Definition server_game.h:147
Definition server_room.h:27