Cockatrice 2026-09-01-Development-3.1.0-beta.10
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#include "game_config.h"
28
29#include <QDateTime>
30#include <QMap>
31#include <QMutex>
32#include <QObject>
33#include <QScopedPointer>
34#include <QSet>
35#include <QStringList>
36#include <libcockatrice/protocol/pb/event_leave.pb.h>
37#include <libcockatrice/protocol/pb/response.pb.h>
38#include <libcockatrice/protocol/pb/serverinfo_game.pb.h>
39
40class QTimer;
42class GameReplay;
43class Server_Room;
46class ServerInfo_User;
47class ServerInfo_Game;
50
51class Server_Game : public QObject
52{
53 Q_OBJECT
54private:
57 std::atomic<qint64> nextArrowId = 1;
58 int hostId;
60 QMap<int, Server_AbstractParticipant *> participants;
64 int gameId;
65 QString description;
66 QString password;
68 QList<int> gameTypes;
81 QDateTime startTime;
82 QTimer *pingClock;
83 QList<GameReplay *> replayList;
85
86 QScopedPointer<Server_DeckValidationStrategy> deckValidationStrategy;
87
88 QScopedPointer<Server_GameLifecycleStrategy> lifecycleStrategy;
89
90 QScopedPointer<Server_MatchResultStrategy> matchResultStrategy;
91
94 bool omniscient,
95 bool withUserInfo);
97signals:
98 void sigStartGameIfReady(bool override);
100private slots:
101 void pingClockTimeout();
102 void doStartGameIfReady(bool forceStartGame = false);
103
104public:
105 mutable QRecursiveMutex gameMutex;
106 Server_Game(const GameConfig &config, Server_Room *parent);
107 ~Server_Game() override;
109 {
110 return room;
111 }
112 void getInfo(ServerInfo_Game &result) const;
113 int getHostId() const
114 {
115 return hostId;
116 }
118 {
119 return creatorInfo;
120 }
121 bool getGameStarted() const
122 {
123 return gameStarted;
124 }
125 int getPlayerCount() const;
126 int getSpectatorCount() const;
127 QMap<int, Server_AbstractPlayer *> getPlayers() const;
128 Server_AbstractPlayer *getPlayer(int id) const;
129 const QMap<int, Server_AbstractParticipant *> &getParticipants() const
130 {
131 return participants;
132 }
133 int getGameId() const
134 {
135 return gameId;
136 }
137 QString getDescription() const
138 {
139 return description;
140 }
141 QString getPassword() const
142 {
143 return password;
144 }
145 int getMaxPlayers() const
146 {
147 return maxPlayers;
148 }
150 {
151 return spectatorsAllowed;
152 }
154 {
156 }
158 {
159 return spectatorsCanTalk;
160 }
162 {
164 }
166 {
167 return startingLifeTotal;
168 }
170 {
172 }
174 checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge);
175 bool containsUser(const QString &userName) const;
176 void addPlayer(Server_AbstractUserInterface *userInterface,
178 bool spectator,
179 bool judge,
180 bool broadcastUpdate = true);
184 bool kickParticipant(int playerId);
185 void startGameIfReady(bool forceStartGame);
186 void stopGameIfFinished();
187 int getActivePlayer() const
188 {
189 return activePlayer;
190 }
191 int getActivePhase() const
192 {
193 return activePhase;
194 }
195 void setActivePlayer(int newPlayer);
196 void setActivePhase(int newPhase);
197 qint64 generateArrowId();
198 void removeArrows(int newPhase, bool force = false);
199 void nextTurn();
201 {
202 return secondsElapsed;
203 }
205 {
207 }
208
209 void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming);
210
212 prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context = 0);
213 GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext);
214
217 GameEventStorageItem::EventRecipients recipients = GameEventStorageItem::SendToPrivate |
219 int privatePlayerId = -1);
221
227
229
235};
236
237#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:58
Definition server_abstract_player.h:19
Definition server_abstractuserinterface.h:20
Strategy for validating a player's deck before it is loaded into a game.
Definition server_deck_validation_strategy.h:18
Strategy hook invoked around a game's lifecycle transitions.
Definition server_game_lifecycle_strategy.h:13
int getActivePlayer() const
Definition server_game.h:187
QList< int > gameTypes
Definition server_game.h:68
void sendGameStateToPlayers()
Definition server_game.cpp:273
void stopGameIfFinished()
Definition server_game.cpp:391
int startTimeOfThisGame
Definition server_game.h:78
bool gameClosed
Definition server_game.h:63
void removeArrows(int newPhase, bool force=false)
Definition server_game.cpp:704
void gameInfoChanged(ServerInfo_Game gameInfo)
bool getSpectatorsNeedPassword() const
Definition server_game.h:153
QTimer * pingClock
Definition server_game.h:82
void storeGameInformation()
Definition server_game.cpp:124
ServerInfo_User * creatorInfo
Definition server_game.h:59
bool firstGameStarted
Definition server_game.h:79
int maxPlayers
Definition server_game.h:67
bool gameStarted
Definition server_game.h:62
bool onlyRegistered
Definition server_game.h:70
void startGameIfReady(bool forceStartGame)
Definition server_game.cpp:386
std::atomic< qint64 > nextArrowId
Definition server_game.h:57
void sendGameEventContainer(GameEventContainer *cont, GameEventStorageItem::EventRecipients recipients=GameEventStorageItem::SendToPrivate|GameEventStorageItem::SendToOthers, int privatePlayerId=-1)
Definition server_game.cpp:788
GameEventContainer * prepareGameEvent(const ::google::protobuf::Message &gameEvent, int playerId, GameEventContext *context=0)
Definition server_game.cpp:813
int getSpectatorCount() const
Definition server_game.cpp:241
bool containsUser(const QString &userName) const
Definition server_game.cpp:482
bool getSpectatorsSeeEverything() const
Definition server_game.h:161
void setActivePhase(int newPhase)
Definition server_game.cpp:687
QMap< int, Server_AbstractParticipant * > participants
Definition server_game.h:60
void nextTurn()
Definition server_game.cpp:721
QDateTime startTime
Definition server_game.h:81
QList< GameReplay * > replayList
Definition server_game.h:83
bool turnOrderReversed
Definition server_game.h:80
bool getShareDecklistsOnLoad() const
Definition server_game.h:169
const QMap< int, Server_AbstractParticipant * > & getParticipants() const
Definition server_game.h:129
QMap< int, Server_AbstractPlayer * > getPlayers() const
Definition server_game.cpp:213
bool spectatorsSeeEverything
Definition server_game.h:74
int startingLifeTotal
Definition server_game.h:75
Response::ResponseCode checkJoin(ServerInfo_User *user, const QString &_password, bool spectator, bool overrideRestrictions, bool asJudge)
Definition server_game.cpp:436
void getInfo(ServerInfo_Game &result) const
Definition server_game.cpp:830
Server_GameLifecycleStrategy * getLifecycleStrategy() const
Get the current game lifecycle strategy (non-owning).
Definition server_game.h:231
void removeArrowsRelatedToPlayer(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:597
~Server_Game() override
Definition server_game.cpp:84
QScopedPointer< Server_GameLifecycleStrategy > lifecycleStrategy
Definition server_game.h:88
bool onlyBuddies
Definition server_game.h:70
Server_Room * room
Definition server_game.h:55
bool getSpectatorsCanTalk() const
Definition server_game.h:157
QString description
Definition server_game.h:65
int secondsElapsed
Definition server_game.h:78
QSet< QString > allSpectatorsEver
Definition server_game.h:61
bool shareDecklistsOnLoad
Definition server_game.h:76
bool kickParticipant(int playerId)
Definition server_game.cpp:654
bool getSpectatorsAllowed() const
Definition server_game.h:149
bool spectatorsAllowed
Definition server_game.h:71
void removeParticipant(Server_AbstractParticipant *participant, Event_Leave::LeaveReason reason)
Definition server_game.cpp:547
bool spectatorsNeedPassword
Definition server_game.h:72
QRecursiveMutex gameMutex
Definition server_game.h:105
void sigStartGameIfReady(bool override)
Server_AbstractPlayer * getPlayer(int id) const
Definition server_game.cpp:226
QString password
Definition server_game.h:66
int getSecondsElapsed() const
Definition server_game.h:200
ServerInfo_User * getCreatorInfo() const
Definition server_game.h:117
int activePhase
Definition server_game.h:69
Server_Room * getRoom() const
Definition server_game.h:108
int getPlayerCount() const
Definition server_game.cpp:236
int getStartingLifeTotal() const
Definition server_game.h:165
void setActivePlayer(int newPlayer)
Definition server_game.cpp:672
void doStartGameIfReady(bool forceStartGame=false)
Definition server_game.cpp:311
int getActivePhase() const
Definition server_game.h:191
bool spectatorsCanTalk
Definition server_game.h:73
GameEventContext prepareGameEventContext(const ::google::protobuf::Message &gameEventContext)
bool getGameStarted() const
Definition server_game.h:121
Server_Game(const GameConfig &config, Server_Room *parent)
Definition server_game.cpp:56
Server_DeckValidationStrategy * getDeckValidationStrategy() const
Get the current deck validation strategy (non-owning).
Definition server_game.h:223
void returnCardsFromPlayer(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:867
int nextPlayerId
Definition server_game.h:56
qint64 generateArrowId()
Definition server_game.cpp:699
void createGameJoinedEvent(Server_AbstractParticipant *participant, ResponseContainer &rc, bool resuming)
Definition server_game.cpp:753
QScopedPointer< Server_DeckValidationStrategy > deckValidationStrategy
Definition server_game.h:86
QScopedPointer< Server_MatchResultStrategy > matchResultStrategy
Definition server_game.h:90
int hostId
Definition server_game.h:58
QString getDescription() const
Definition server_game.h:137
int gameId
Definition server_game.h:64
void addPlayer(Server_AbstractUserInterface *userInterface, ResponseContainer &rc, bool spectator, bool judge, bool broadcastUpdate=true)
Definition server_game.cpp:494
QSet< QString > allPlayersEver
Definition server_game.h:61
int getGameId() const
Definition server_game.h:133
void pingClockTimeout()
Definition server_game.cpp:171
int activePlayer
Definition server_game.h:69
void createGameStateChangedEvent(Event_GameStateChanged *event, Server_AbstractParticipant *recipient, bool omniscient, bool withUserInfo)
Definition server_game.cpp:254
bool reverseTurnOrder()
Definition server_game.h:204
GameReplay * currentReplay
Definition server_game.h:84
int inactivityCounter
Definition server_game.h:77
int getMaxPlayers() const
Definition server_game.h:145
int getHostId() const
Definition server_game.h:113
void unattachCards(GameEventStorage &ges, Server_AbstractPlayer *player)
Definition server_game.cpp:632
QString getPassword() const
Definition server_game.h:141
void setDeckValidationStrategy(Server_DeckValidationStrategy *strategy)
Replace the deck validation strategy; takes ownership of strategy.
Definition server_game.cpp:910
Definition server_room.h:27
Definition event_game_state_changed.proto:8
LeaveReason
Definition event_leave.proto:7
Definition game_config.h:9
Definition game_event_container.proto:4
Definition game_event_context.proto:2
Definition game_replay.proto:4
ResponseCode
Definition response.proto:14
Definition serverinfo_game.proto:5
Definition serverinfo_user.proto:2