Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
servatrice.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 SERVATRICE_H
21#define SERVATRICE_H
22
23#include <QHostAddress>
24#include <QMetaType>
25#include <QMutex>
26#include <QReadWriteLock>
27#include <QSqlDatabase>
28#include <QSslCertificate>
29#include <QSslKey>
30#include <QTcpServer>
31#include <QWebSocketServer>
32#include <server.h>
33#include <utility>
34
35Q_DECLARE_METATYPE(QSqlDatabase)
36
37class QSqlQuery;
38class QTimer;
39
40class GameReplay;
41class Servatrice;
45class IslInterface;
46class FeatureSet;
47
48class Servatrice_GameServer : public QTcpServer
49{
50 Q_OBJECT
51private:
53 QList<Servatrice_ConnectionPool *> connectionPools;
54
55public:
57 int _numberPools,
58 const QSqlDatabase &_sqlDatabase,
59 QObject *parent = nullptr);
60 ~Servatrice_GameServer() override;
61
62protected:
63 void incomingConnection(qintptr socketDescriptor) override;
65};
66
67class Servatrice_WebsocketGameServer : public QWebSocketServer
68{
69 Q_OBJECT
70private:
72 QList<Servatrice_ConnectionPool *> connectionPools;
73
74public:
76 int _numberPools,
77 const QSqlDatabase &_sqlDatabase,
78 QObject *parent = nullptr);
80
81protected:
83protected slots:
84 void onNewConnection();
85};
86
87class Servatrice_IslServer : public QTcpServer
88{
89 Q_OBJECT
90private:
92 QSslCertificate cert;
93 QSslKey privateKey;
94
95public:
97 const QSslCertificate &_cert,
98 QSslKey _privateKey,
99 QObject *parent = nullptr)
100 : QTcpServer(parent), server(_server), cert(_cert), privateKey(std::move(_privateKey))
101 {
102 }
103
104protected:
105 void incomingConnection(qintptr socketDescriptor) override;
106};
107
109{
110public:
111 int id;
112 QSslCertificate cert;
113 QString hostname;
114 QHostAddress address;
117
119 const QSslCertificate &_cert,
120 QString _hostname,
121 const QHostAddress &_address,
122 int _gamePort,
123 int _controlPort)
124 : id(_id), cert(_cert), hostname(std::move(_hostname)), address(_address), gamePort(_gamePort),
125 controlPort(_controlPort)
126 {
127 }
128};
129
130class Servatrice : public Server
131{
132 Q_OBJECT
133public:
140private slots:
141 void statusUpdate();
142 void shutdownTimeout();
143
144protected:
145 void doSendIslMessage(const IslMessage &msg, int _serverId) override;
146
147private:
159 mutable QMutex loginMessageMutex;
161 QString dbPrefix;
162 QMap<QString, bool> serverRequiredFeatureList;
168 quint64 txBytes, rxBytes;
169
174
175 mutable QMutex serverListMutex;
176 QList<ServerProperties> serverList;
177 void updateServerList();
178
179 QMap<int, IslInterface *> islInterfaces;
180
181 QString getDBPrefixString() const;
182 QString getDBHostNameString() const;
183 QString getDBDatabaseNameString() const;
184 QString getDBUserNameString() const;
185 QString getDBPasswordString() const;
186 QString getRoomsMethodString() const;
187 QString getISLNetworkSSLCertFile() const;
188 QString getISLNetworkSSLKeyFile() const;
189 int getServerStatusUpdateTime() const;
190 int getNumberOfTCPPools() const;
191 int getServerTCPPort() const;
192 int getNumberOfWebSocketPools() const;
193 int getServerWebSocketPort() const;
194 int getISLNetworkPort() const;
195 bool getISLNetworkEnabled() const;
196 bool getEnableInternalSMTPClient() const;
197 QHostAddress getServerTCPHost() const;
198 QHostAddress getServerWebSocketHost() const;
199
200public slots:
201 void scheduleShutdown(const QString &reason, int minutes);
202 void updateLoginMessage();
203 void setRequiredFeatures(const QString &featureList);
204
205public:
206 explicit Servatrice(QObject *parent = nullptr);
207 ~Servatrice() override;
208 bool initServer();
209 QMap<QString, bool> getServerRequiredFeatureList() const override
210 {
212 }
213 QString getServerName() const;
214 QString getLoginMessage() const override
215 {
216 QMutexLocker locker(&loginMessageMutex);
217 return loginMessage;
218 }
219 QString getRequiredFeatures() const override;
220 QString getAuthenticationMethodString() const;
221 QString getDBTypeString() const;
222 QString getDbPrefix() const
223 {
224 return dbPrefix;
225 }
226 QString getEmailBlackList() const;
227 QString getEmailWhiteList() const;
232 bool permitUnregisteredUsers() const override
233 {
235 }
236 bool getGameShouldPing() const override
237 {
238 return true;
239 }
240 bool getClientIDRequiredEnabled() const override;
241 bool getRegOnlyServerEnabled() const override;
242 bool getMaxUserLimitEnabled() const override;
243 bool getStoreReplaysEnabled() const override;
244 bool getRegistrationEnabled() const;
247 bool getEnableLogQuery() const override;
248 bool getEnableForgotPassword() const;
250 bool getEnableAudit() const;
251 bool getEnableRegistrationAudit() const;
252 bool getEnableForgotPasswordAudit() const;
253 int getMinPasswordLength() const;
254 int getIdleClientTimeout() const override;
255 int getServerID() const override;
256 int getMaxGameInactivityTime() const override;
257 int getMaxPlayerInactivityTime() const override;
258 int getClientKeepAlive() const override;
259 int getMaxUsersPerAddress() const;
260 int getMessageCountingInterval() const override;
261 int getMaxMessageCountPerInterval() const override;
262 int getMaxMessageSizePerInterval() const override;
263 int getMaxGamesPerUser() const override;
264 int getCommandCountingInterval() const override;
265 int getMaxCommandCountPerInterval() const override;
266 int getMaxUserTotal() const override;
267 bool permitCreateGameAsJudge() const override;
268 int getMaxTcpUserLimit() const;
269 int getMaxWebSocketUserLimit() const;
270 int getUsersWithAddress(const QHostAddress &address) const;
271 int getMaxAccountsPerEmail() const;
272 int getForgotPasswordTokenLife() const;
273 QList<AbstractServerSocketInterface *> getUsersWithAddressAsList(const QHostAddress &address) const;
274 void incTxBytes(quint64 num);
275 void incRxBytes(quint64 num);
276 void addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface);
277
278 bool islConnectionExists(int _serverId) const;
279 void addIslInterface(int _serverId, IslInterface *interface);
280 void removeIslInterface(int _serverId);
281 QReadWriteLock islLock;
282
283 QList<ServerProperties> getServerList() const;
284};
285
286#endif
Definition serversocketinterface.h:59
Definition featureset.h:9
Definition isl_interface.h:29
Definition servatrice_connection_pool.h:11
Definition servatrice_database_interface.h:18
Definition servatrice.h:49
Servatrice_ConnectionPool * findLeastUsedConnectionPool()
Definition servatrice.cpp:97
~Servatrice_GameServer() override
Definition servatrice.cpp:73
void incomingConnection(qintptr socketDescriptor) override
Definition servatrice.cpp:84
Servatrice * server
Definition servatrice.h:52
Servatrice_GameServer(Servatrice *_server, int _numberPools, const QSqlDatabase &_sqlDatabase, QObject *parent=nullptr)
Definition servatrice.cpp:49
QList< Servatrice_ConnectionPool * > connectionPools
Definition servatrice.h:53
Definition servatrice.h:88
QSslCertificate cert
Definition servatrice.h:92
Servatrice * server
Definition servatrice.h:91
void incomingConnection(qintptr socketDescriptor) override
Definition servatrice.cpp:188
QSslKey privateKey
Definition servatrice.h:93
Servatrice_IslServer(Servatrice *_server, const QSslCertificate &_cert, QSslKey _privateKey, QObject *parent=nullptr)
Definition servatrice.h:96
Definition servatrice.h:68
Servatrice_WebsocketGameServer(Servatrice *_server, int _numberPools, const QSqlDatabase &_sqlDatabase, QObject *parent=nullptr)
Definition servatrice.cpp:116
QList< Servatrice_ConnectionPool * > connectionPools
Definition servatrice.h:72
Servatrice * server
Definition servatrice.h:71
Servatrice_ConnectionPool * findLeastUsedConnectionPool()
Definition servatrice.cpp:171
void onNewConnection()
Definition servatrice.cpp:154
~Servatrice_WebsocketGameServer() override
Definition servatrice.cpp:143
Definition servatrice.h:131
QString getISLNetworkSSLKeyFile() const
Definition servatrice.cpp:1023
int getMessageCountingInterval() const override
Definition servatrice.cpp:932
bool initServer()
Definition servatrice.cpp:225
int getNumberOfTCPPools() const
Definition servatrice.cpp:967
int getServerWebSocketPort() const
Definition servatrice.cpp:1005
int getUsersWithAddress(const QHostAddress &address) const
Definition servatrice.cpp:515
QString getAuthenticationMethodString() const
Definition servatrice.cpp:812
quint64 rxBytes
Definition servatrice.h:168
QString getDBHostNameString() const
Definition servatrice.cpp:871
QHostAddress getServerWebSocketHost() const
Definition servatrice.cpp:996
QString getDBTypeString() const
Definition servatrice.cpp:855
int getMaxCommandCountPerInterval() const override
Definition servatrice.cpp:957
bool getISLNetworkEnabled() const
Definition servatrice.cpp:1013
QList< ServerProperties > serverList
Definition servatrice.h:176
int nextShutdownMessageMinutes
Definition servatrice.h:172
QList< AbstractServerSocketInterface * > getUsersWithAddressAsList(const QHostAddress &address) const
Definition servatrice.cpp:526
int getMaxUsersPerAddress() const
Definition servatrice.cpp:927
bool getEnableAudit() const
Definition servatrice.cpp:1078
Servatrice(QObject *parent=nullptr)
Definition servatrice.cpp:201
bool getRequireEmailActivationEnabled() const
Definition servatrice.cpp:845
bool getRegOnlyServerEnabled() const override
Definition servatrice.cpp:807
QTimer * shutdownTimer
Definition servatrice.h:173
void shutdownTimeout()
Definition servatrice.cpp:694
int getMaxMessageCountPerInterval() const override
Definition servatrice.cpp:937
int getMaxGameInactivityTime() const override
Definition servatrice.cpp:912
void addDatabaseInterface(QThread *thread, Servatrice_DatabaseInterface *databaseInterface)
Definition servatrice.cpp:474
int getForgotPasswordTokenLife() const
Definition servatrice.cpp:1058
void doSendIslMessage(const IslMessage &msg, int _serverId) override
Definition servatrice.cpp:765
QString getServerName() const
Definition servatrice.cpp:792
bool getEnableLogQuery() const override
Definition servatrice.cpp:1038
bool getRegistrationEnabled() const
Definition servatrice.cpp:835
bool getClientIDRequiredEnabled() const override
Definition servatrice.cpp:802
int getMaxPlayerInactivityTime() const override
Definition servatrice.cpp:917
int getMaxAccountsPerEmail() const
Definition servatrice.cpp:1043
QString getLoginMessage() const override
Definition servatrice.h:214
QString loginMessage
Definition servatrice.h:160
~Servatrice() override
Definition servatrice.cpp:208
DatabaseType
Definition servatrice.h:149
@ DatabaseMySql
Definition servatrice.h:151
@ DatabaseNone
Definition servatrice.h:150
QTimer * pingClock
Definition servatrice.h:155
Servatrice_DatabaseInterface * servatriceDatabaseInterface
Definition servatrice.h:164
int getCommandCountingInterval() const override
Definition servatrice.cpp:952
DatabaseType databaseType
Definition servatrice.h:154
AuthenticationMethod authenticationMethod
Definition servatrice.h:153
bool getMaxUserLimitEnabled() const override
Definition servatrice.cpp:787
QMutex serverListMutex
Definition servatrice.h:175
int getServerID() const override
Definition servatrice.cpp:797
QString getRequiredFeatures() const override
Definition servatrice.cpp:850
void updateServerList()
Definition servatrice.cpp:479
void scheduleShutdown(const QString &reason, int minutes)
Definition servatrice.cpp:667
void statusUpdate()
Definition servatrice.cpp:580
bool getEnableForgotPasswordAudit() const
Definition servatrice.cpp:1088
int getMaxTcpUserLimit() const
Definition servatrice.cpp:825
AuthenticationMethod
Definition servatrice.h:135
@ AuthenticationPassword
Definition servatrice.h:138
@ AuthenticationNone
Definition servatrice.h:136
@ AuthenticationSql
Definition servatrice.h:137
QReadWriteLock islLock
Definition servatrice.h:281
QString getRoomsMethodString() const
Definition servatrice.cpp:904
QHostAddress getServerTCPHost() const
Definition servatrice.cpp:977
int getServerStatusUpdateTime() const
Definition servatrice.cpp:962
AuthenticationMethod getAuthenticationMethod() const
Definition servatrice.h:228
QString getEmailWhiteList() const
Definition servatrice.cpp:1073
void updateLoginMessage()
Definition servatrice.cpp:536
void setRequiredFeatures(const QString &featureList)
Definition servatrice.cpp:562
void incRxBytes(quint64 num)
Definition servatrice.cpp:687
QString getISLNetworkSSLCertFile() const
Definition servatrice.cpp:1018
bool getStoreReplaysEnabled() const override
Definition servatrice.cpp:820
QString officialWarnings
Definition servatrice.h:163
int getNumberOfWebSocketPools() const
Definition servatrice.cpp:991
bool getEnableInternalSMTPClient() const
Definition servatrice.cpp:1048
int getMaxGamesPerUser() const override
Definition servatrice.cpp:947
bool getEnableForgotPassword() const
Definition servatrice.cpp:1053
void removeIslInterface(int _serverId)
Definition servatrice.cpp:757
bool islConnectionExists(int _serverId) const
Definition servatrice.cpp:726
bool getEnableForgotPasswordChallenge() const
Definition servatrice.cpp:1063
QString getDBPrefixString() const
Definition servatrice.cpp:863
QString getDbPrefix() const
Definition servatrice.h:222
int getMaxMessageSizePerInterval() const override
Definition servatrice.cpp:942
int getMaxUserTotal() const override
Definition servatrice.cpp:782
QMutex txBytesMutex
Definition servatrice.h:167
QString getDBDatabaseNameString() const
Definition servatrice.cpp:879
bool permitCreateGameAsJudge() const override
Definition servatrice.cpp:972
QList< ServerProperties > getServerList() const
Definition servatrice.cpp:506
QMap< int, IslInterface * > islInterfaces
Definition servatrice.h:179
Servatrice_IslServer * islServer
Definition servatrice.h:158
bool getRequireEmailForRegistrationEnabled() const
Definition servatrice.cpp:840
int getIdleClientTimeout() const override
Definition servatrice.cpp:1033
bool getEnableRegistrationAudit() const
Definition servatrice.cpp:1083
int getMinPasswordLength() const
Definition servatrice.cpp:1093
QMap< QString, bool > serverRequiredFeatureList
Definition servatrice.h:162
Servatrice_WebsocketGameServer * websocketGameServer
Definition servatrice.h:157
QString dbPrefix
Definition servatrice.h:161
quint64 txBytes
Definition servatrice.h:168
int getServerTCPPort() const
Definition servatrice.cpp:986
int getISLNetworkPort() const
Definition servatrice.cpp:1028
QTimer * statusUpdateClock
Definition servatrice.h:155
void incTxBytes(quint64 num)
Definition servatrice.cpp:680
int getClientKeepAlive() const override
Definition servatrice.cpp:922
bool getGameShouldPing() const override
Definition servatrice.h:236
int uptime
Definition servatrice.h:166
QString getDBUserNameString() const
Definition servatrice.cpp:888
int serverId
Definition servatrice.h:165
QMutex loginMessageMutex
Definition servatrice.h:159
QString shutdownReason
Definition servatrice.h:170
QString getEmailBlackList() const
Definition servatrice.cpp:1068
Servatrice_GameServer * gameServer
Definition servatrice.h:156
QString getDBPasswordString() const
Definition servatrice.cpp:896
int shutdownMinutes
Definition servatrice.h:171
int getMaxWebSocketUserLimit() const
Definition servatrice.cpp:830
QMap< QString, bool > getServerRequiredFeatureList() const override
Definition servatrice.h:209
bool permitUnregisteredUsers() const override
Definition servatrice.h:232
void addIslInterface(int _serverId, IslInterface *interface)
Definition servatrice.cpp:732
QMutex rxBytesMutex
Definition servatrice.h:167
int controlPort
Definition servatrice.h:116
int id
Definition servatrice.h:111
QSslCertificate cert
Definition servatrice.h:112
QString hostname
Definition servatrice.h:113
int gamePort
Definition servatrice.h:115
ServerProperties(int _id, const QSslCertificate &_cert, QString _hostname, const QHostAddress &_address, int _gamePort, int _controlPort)
Definition servatrice.h:118
QHostAddress address
Definition servatrice.h:114
Server(QObject *parent=nullptr)
Definition server.cpp:40