Cockatrice 2026-06-27-Development-3.1.0-beta.3
A 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 std::atomic<qint64> nextArrowId = 1;
53 int hostId;
54 ServerInfo_User *creatorInfo;
55 QMap<int, Server_AbstractParticipant *> participants;
59 int gameId;
60 QString description;
61 QString password;
63 QList<int> gameTypes;
76 QDateTime startTime;
77 QTimer *pingClock;
78 QList<GameReplay *> replayList;
79 GameReplay *currentReplay;
80
81 void createGameStateChangedEvent(Event_GameStateChanged *event,
83 bool omniscient,
84 bool withUserInfo);
86signals:
87 void sigStartGameIfReady(bool override);
88 void gameInfoChanged(ServerInfo_Game gameInfo);
89private slots:
90 void pingClockTimeout();
91 void doStartGameIfReady(bool forceStartGame = false);
92
93public:
94 mutable QRecursiveMutex gameMutex;
95 Server_Game(const ServerInfo_User &_creatorInfo,
96 int _gameId,
97 const QString &_description,
98 const QString &_password,
99 int _maxPlayers,
100 const QList<int> &_gameTypes,
101 bool _onlyBuddies,
102 bool _onlyRegistered,
103 bool _spectatorsAllowed,
104 bool _spectatorsNeedPassword,
105 bool _spectatorsCanTalk,
106 bool _spectatorsSeeEverything,
107 int _startingLifeTotal,
108 bool _shareDecklistsOnLoad,
109 Server_Room *parent);
110 ~Server_Game() override;
112 {
113 return room;
114 }
115 void getInfo(ServerInfo_Game &result) const;
116 int getHostId() const
117 {
118 return hostId;
119 }
120 ServerInfo_User *getCreatorInfo() const
121 {
122 return creatorInfo;
123 }
124 bool getGameStarted() const
125 {
126 return gameStarted;
127 }
128 int getPlayerCount() const;
129 int getSpectatorCount() const;
130 QMap<int, Server_AbstractPlayer *> getPlayers() const;
131 Server_AbstractPlayer *getPlayer(int id) const;
132 const QMap<int, Server_AbstractParticipant *> &getParticipants() const
133 {
134 return participants;
135 }
136 int getGameId() const
137 {
138 return gameId;
139 }
140 QString getDescription() const
141 {
142 return description;
143 }
144 QString getPassword() const
145 {
146 return password;
147 }
148 int getMaxPlayers() const
149 {
150 return maxPlayers;
151 }
153 {
154 return spectatorsAllowed;
155 }
157 {
159 }
161 {
162 return spectatorsCanTalk;
163 }
165 {
167 }
169 {
170 return startingLifeTotal;
171 }
173 {
175 }
176 Response::ResponseCode
177 checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge);
178 bool containsUser(const QString &userName) const;
179 void addPlayer(Server_AbstractUserInterface *userInterface,
181 bool spectator,
182 bool judge,
183 bool broadcastUpdate = true);
184 void removeParticipant(Server_AbstractParticipant *participant, Event_Leave::LeaveReason reason);
187 bool kickParticipant(int playerId);
188 void startGameIfReady(bool forceStartGame);
189 void stopGameIfFinished();
190 int getActivePlayer() const
191 {
192 return activePlayer;
193 }
194 int getActivePhase() const
195 {
196 return activePhase;
197 }
198 void setActivePlayer(int newPlayer);
199 void setActivePhase(int newPhase);
200 qint64 generateArrowId();
201 void removeArrows(int newPhase, bool force = false);
202 void nextTurn();
204 {
205 return secondsElapsed;
206 }
208 {
210 }
211
212 void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming);
213
214 GameEventContainer *
215 prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context = 0);
216 GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext);
217
219 void sendGameEventContainer(GameEventContainer *cont,
220 GameEventStorageItem::EventRecipients recipients = GameEventStorageItem::SendToPrivate |
222 int privatePlayerId = -1);
224};
225
226#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:190
QList< int > gameTypes
Definition server_game.h:63
void sendGameStateToPlayers()
Definition server_game.cpp:285
void stopGameIfFinished()
Definition server_game.cpp:398
int startTimeOfThisGame
Definition server_game.h:73
bool gameClosed
Definition server_game.h:58
void removeArrows(int newPhase, bool force=false)
Definition server_game.cpp:705
void gameInfoChanged(ServerInfo_Game gameInfo)
bool getSpectatorsNeedPassword() const
Definition server_game.h:156
QTimer * pingClock
Definition server_game.h:77
void storeGameInformation()
Definition server_game.cpp:136
ServerInfo_User * creatorInfo
Definition server_game.h:54
bool firstGameStarted
Definition server_game.h:74
int maxPlayers
Definition server_game.h:62
bool gameStarted
Definition server_game.h:57
bool onlyRegistered
Definition server_game.h:65
void startGameIfReady(bool forceStartGame)
Definition server_game.cpp:393
std::atomic< qint64 > nextArrowId
Definition server_game.h:52
void sendGameEventContainer(GameEventContainer *cont, GameEventStorageItem::EventRecipients recipients=GameEventStorageItem::SendToPrivate|GameEventStorageItem::SendToOthers, int privatePlayerId=-1)
Definition server_game.cpp:789
GameEventContainer * prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context=0)
Definition server_game.cpp:814
int getSpectatorCount() const
Definition server_game.cpp:253
bool containsUser(const QString &userName) const
Definition server_game.cpp:477
bool getSpectatorsSeeEverything() const
Definition server_game.h:164
void setActivePhase(int newPhase)
Definition server_game.cpp:688
QMap< int, Server_AbstractParticipant * > participants
Definition server_game.h:55
void nextTurn()
Definition server_game.cpp:722
QDateTime startTime
Definition server_game.h:76
QList< GameReplay * > replayList
Definition server_game.h:78
bool turnOrderReversed
Definition server_game.h:75
bool getShareDecklistsOnLoad() const
Definition server_game.h:172
const QMap< int, Server_AbstractParticipant * > & getParticipants() const
Definition server_game.h:132
QMap< int, Server_AbstractPlayer * > getPlayers() const
Definition server_game.cpp:225
bool spectatorsSeeEverything
Definition server_game.h:69
int startingLifeTotal
Definition server_game.h:70
Response::ResponseCode checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge)
Definition server_game.cpp:431
void getInfo(ServerInfo_Game &result) const
Definition server_game.cpp:831
void removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:598
~Server_Game() override
Definition server_game.cpp:96
bool onlyBuddies
Definition server_game.h:65
Server_Room * room
Definition server_game.h:50
bool getSpectatorsCanTalk() const
Definition server_game.h:160
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:56
QString description
Definition server_game.h:60
int secondsElapsed
Definition server_game.h:73
QSet< QString > allSpectatorsEver
Definition server_game.h:56
bool shareDecklistsOnLoad
Definition server_game.h:71
bool kickParticipant(int playerId)
Definition server_game.cpp:655
bool getSpectatorsAllowed() const
Definition server_game.h:152
bool spectatorsAllowed
Definition server_game.h:66
void removeParticipant(Server_AbstractParticipant *participant, Event_Leave::LeaveReason reason)
Definition server_game.cpp:545
bool spectatorsNeedPassword
Definition server_game.h:67
QRecursiveMutex gameMutex
Definition server_game.h:94
void sigStartGameIfReady(bool override)
Server_AbstractPlayer * getPlayer(int id) const
Definition server_game.cpp:238
QString password
Definition server_game.h:61
int getSecondsElapsed() const
Definition server_game.h:203
ServerInfo_User * getCreatorInfo() const
Definition server_game.h:120
int activePhase
Definition server_game.h:64
Server_Room * getRoom() const
Definition server_game.h:111
int getPlayerCount() const
Definition server_game.cpp:248
int getStartingLifeTotal() const
Definition server_game.h:168
void setActivePlayer(int newPlayer)
Definition server_game.cpp:673
void doStartGameIfReady(bool forceStartGame=false)
Definition server_game.cpp:323
int getActivePhase() const
Definition server_game.h:194
bool spectatorsCanTalk
Definition server_game.h:68
GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext)
bool getGameStarted() const
Definition server_game.h:124
void returnCardsFromPlayer(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:862
int nextPlayerId
Definition server_game.h:51
qint64 generateArrowId()
Definition server_game.cpp:700
void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming)
Definition server_game.cpp:754
int hostId
Definition server_game.h:53
QString getDescription() const
Definition server_game.h:140
int gameId
Definition server_game.h:59
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool judge, bool broadcastUpdate=true)
Definition server_game.cpp:489
QSet< QString > allPlayersEver
Definition server_game.h:56
int getGameId() const
Definition server_game.h:136
void pingClockTimeout()
Definition server_game.cpp:183
int activePlayer
Definition server_game.h:64
void createGameStateChangedEvent(Event_GameStateChanged *event, Server_AbstractParticipant *recipient, bool omniscient, bool withUserInfo)
Definition server_game.cpp:266
bool reverseTurnOrder()
Definition server_game.h:207
GameReplay * currentReplay
Definition server_game.h:79
int inactivityCounter
Definition server_game.h:72
int getMaxPlayers() const
Definition server_game.h:148
int getHostId() const
Definition server_game.h:116
void unattachCards(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:633
QString getPassword() const
Definition server_game.h:144
Definition server_room.h:27