Cockatrice 2026-09-01-Development-3.1.0-beta.10
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
serversocketinterface.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 SERVERSOCKETINTERFACE_H
21#define SERVERSOCKETINTERFACE_H
22
23#include <QHostAddress>
24#include <QMutex>
25#include <QTcpSocket>
26#include <QWebSocket>
27#include <libcockatrice/protocol/pb/command_replay_download_by_game_id.pb.h>
28#include <libcockatrice/protocol/pb/command_report.pb.h>
29#include <libcockatrice/protocol/pb/command_report_add_comment.pb.h>
30#include <libcockatrice/protocol/pb/command_report_assign.pb.h>
31#include <libcockatrice/protocol/pb/command_report_details.pb.h>
32#include <libcockatrice/protocol/pb/command_report_list.pb.h>
33#include <libcockatrice/protocol/pb/command_report_my_list.pb.h>
34#include <libcockatrice/protocol/pb/command_report_resolve.pb.h>
35#include <libcockatrice/protocol/pb/command_report_stats.pb.h>
36#include <libcockatrice/protocol/pb/command_report_user_info.pb.h>
38
39class Servatrice;
41class DeckList;
43
49class Command_DeckDel;
58
64
68
70{
71 Q_OBJECT
72protected slots:
73 void catchSocketError(QAbstractSocket::SocketError socketError);
75 virtual void flushOutputQueue() = 0;
76signals:
78 void incTxBytes(qint64 amount);
79
80protected:
81 void logDebugMessage(const QString &message) override;
82 bool tooManyRegistrationAttempts(const QString &ipAddress);
83
84 virtual void writeToSocket(QByteArray &data) = 0;
85 virtual void flushSocket() = 0;
86
88 QList<ServerMessage> outputQueue;
90
91private:
93
96 int getDeckPathId(int basePathId, QStringList path);
97 int getDeckPathId(const QString &path);
98 bool deckListHelper(int folderId, ServerInfo_DeckStorage_Folder *folder);
101 void deckDelDirHelper(int basePathId);
102 void sendServerMessage(const QString userName, const QString message);
112 QString createHashForReplay(int gameId);
133 Response::ResponseCode continuePasswordRequest(const QString &userName,
134 const QString &clientId,
136 bool challenged = false);
144 void onLogin(ResponseContainer &rc) override;
149 processExtendedSessionCommand(int cmdType, const SessionCommand &cmd, ResponseContainer &rc) override;
151 processExtendedModeratorCommand(int cmdType, const ModeratorCommand &cmd, ResponseContainer &rc) override;
153 processExtendedAdminCommand(int cmdType, const AdminCommand &cmd, ResponseContainer &rc) override;
154
157 bool isCardNameAllowed(const QString &cardName, const QString &cardProviderId);
165
168
174
175 bool addAdminFlagToUser(const QString &user, int flag);
176 bool removeAdminFlagFromUser(const QString &user, int flag);
177
178 bool isPasswordLongEnough(const int passwordLength);
179 void removeSaidMessages(const QString &userName, int amount);
180
181public:
183 Servatrice_DatabaseInterface *_databaseInterface,
184 QObject *parent = 0);
188 bool initSession();
189
190 virtual QHostAddress getPeerAddress() const = 0;
191 QString getAddress() const override = 0;
192
193 void transmitProtocolItem(const ServerMessage &item) override;
194};
195
197{
198 Q_OBJECT
199public:
201 Servatrice_DatabaseInterface *_databaseInterface,
202 QObject *parent = 0);
204
205 QHostAddress getPeerAddress() const
206 {
207 return socket->peerAddress();
208 }
209 QString getAddress() const
210 {
211 return socket->peerAddress().toString();
212 }
213 QString getConnectionType() const
214 {
215 return "tcp";
216 }
217
218private:
219 QTcpSocket *socket;
220 QByteArray inputBuffer;
224
225protected:
226 void writeToSocket(QByteArray &data)
227 {
228 socket->write(data);
229 }
231 {
232 socket->flush();
233 }
235 bool initTcpSession();
236protected slots:
237 void readClient();
238 void flushOutputQueue();
239public slots:
240 void initConnection(int socketDescriptor);
241};
242
244{
245 Q_OBJECT
246public:
248 Servatrice_DatabaseInterface *_databaseInterface,
249 QObject *parent = nullptr);
251
252 QHostAddress getPeerAddress() const
253 {
254 return address;
255 }
256 QString getAddress() const
257 {
258 return address.toString();
259 }
260 QString getConnectionType() const
261 {
262 return "websocket";
263 }
264
265private:
266 QWebSocket *socket;
267 QHostAddress address;
268
269protected:
270 void writeToSocket(QByteArray &data)
271 {
272 socket->sendBinaryMessage(data);
273 }
275 {
276 socket->flush();
277 }
279protected slots:
280 void binaryMessageReceived(const QByteArray &message);
281 void flushOutputQueue();
282public slots:
283 void initConnection(void *_socket);
284};
285
286#endif
bool isPasswordLongEnough(const int passwordLength)
Definition serversocketinterface.cpp:3714
Response::ResponseCode cmdReplayDeleteMatch(const Command_ReplayDeleteMatch &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:861
Response::ResponseCode cmdRegisterAccount(const Command_Register &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2317
QMutex outputQueueMutex
Definition serversocketinterface.h:89
Response::ResponseCode cmdRequestPasswordSalt(const Command_RequestPasswordSalt &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3037
Response::ResponseCode cmdReportAssign(const Command_ReportAssign &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1401
Response::ResponseCode cmdDeckDownload(const Command_DeckDownload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:721
Response::ResponseCode cmdGrantReplayAccess(const Command_GrantReplayAccess &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3263
Response::ResponseCode cmdDeckList(const Command_DeckList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:521
Response::ResponseCode cmdAccountEdit(const Command_AccountEdit &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2543
Response::ResponseCode cmdRemoveCardArtRule(const Command_RemoveCardArtRule &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:2771
Response::ResponseCode cmdForceActivateUser(const Command_ForceActivateUser &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3309
Response::ResponseCode processExtendedModeratorCommand(int cmdType, const ModeratorCommand &cmd, ResponseContainer &rc) override
Definition serversocketinterface.cpp:265
Response::ResponseCode cmdDeckDel(const Command_DeckDel &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:626
Response::ResponseCode cmdGetAdminNotes(const Command_GetAdminNotes &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3339
QString getAddress() const override=0
Response::ResponseCode cmdShutdownServer(const Command_ShutdownServer &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3161
Response::ResponseCode cmdReportList(const Command_ReportList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1313
Response::ResponseCode cmdAddToList(const Command_AddToList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:340
int getDeckPathId(int basePathId, QStringList path)
Definition serversocketinterface.cpp:440
Response::ResponseCode cmdReplaySubmitCode(const Command_ReplaySubmitCode &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:952
bool tooManyRegistrationAttempts(const QString &ipAddress)
Definition serversocketinterface.cpp:2503
void sendServerMessage(const QString userName, const QString message)
Definition serversocketinterface.cpp:592
Response::ResponseCode cmdGetWarnList(const Command_GetWarnList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1120
Response::ResponseCode cmdAdjustMod(const Command_AdjustMod &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:3230
virtual void writeToSocket(QByteArray &data)=0
Response::ResponseCode cmdDeckUpload(const Command_DeckUpload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:649
Response::ResponseCode cmdReportUserInfo(const Command_ReportUserInfo &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1544
Response::ResponseCode cmdGetLogHistory(const Command_ViewLogHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1022
Response::ResponseCode cmdUpdateServerMessage(const Command_UpdateServerMessage &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3154
Response::ResponseCode cmdReportResolve(const Command_ReportResolve &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:1445
Response::ResponseCode cmdReplayDownload(const Command_ReplayDownload &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:799
void transmitProtocolItem(const ServerMessage &item) override
Definition serversocketinterface.cpp:179
Response::ResponseCode cmdDeckNewDir(const Command_DeckNewDir &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:541
bool isCardNameAllowed(const QString &cardName, const QString &cardProviderId)
Definition serversocketinterface.cpp:2649
Response::ResponseCode cmdSetCardArtParams(const Command_SetCardArtParams &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:2669
Response::ResponseCode processExtendedSessionCommand(int cmdType, const SessionCommand &cmd, ResponseContainer &rc) override
Definition serversocketinterface.cpp:193
Response::ResponseCode cmdGetModeratorLastLogins(const Command_GetModeratorLastLogins &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1796
void deckDelDirHelper(int basePathId)
Definition serversocketinterface.cpp:572
Response::ResponseCode cmdForgotPasswordChallenge(const Command_ForgotPasswordChallenge &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2996
bool addAdminFlagToUser(const QString &user, int flag)
Definition serversocketinterface.cpp:3178
bool removeAdminFlagFromUser(const QString &user, int flag)
Definition serversocketinterface.cpp:3202
Response::ResponseCode cmdReportMyList(const Command_ReportMyList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1979
Response::ResponseCode cmdReportDetails(const Command_ReportDetails &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2048
AbstractServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition serversocketinterface.cpp:123
Response::ResponseCode cmdForgotPasswordRequest(const Command_ForgotPasswordRequest &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2854
Response::ResponseCode cmdReportAddComment(const Command_ReportAddComment &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2151
~AbstractServerSocketInterface()
Definition serversocketinterface.h:185
Response::ResponseCode cmdReloadConfig(const Command_ReloadConfig &, ResponseContainer &)
Definition serversocketinterface.cpp:3169
Response::ResponseCode cmdAccountPassword(const Command_AccountPassword &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2816
void catchSocketDisconnected()
Definition serversocketinterface.cpp:174
Response::ResponseCode cmdReplayGetCode(const Command_ReplayGetCode &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:916
Response::ResponseCode cmdAccountImage(const Command_AccountImage &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2627
Servatrice_DatabaseInterface * sqlInterface
Definition serversocketinterface.h:92
Response::ResponseCode processExtendedAdminCommand(int cmdType, const AdminCommand &cmd, ResponseContainer &rc) override
Definition serversocketinterface.cpp:322
Response::ResponseCode cmdRemoveUserAvatar(const Command_RemoveUserAvatar &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1873
Response::ResponseCode cmdReplayList(const Command_ReplayList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:743
bool initSession()
Definition serversocketinterface.cpp:135
bool deckListHelper(int folderId, ServerInfo_DeckStorage_Folder *folder)
Definition serversocketinterface.cpp:473
Response::ResponseCode cmdGetUserSessions(const Command_GetUserSessions &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1753
Response::ResponseCode cmdResetUserPassword(const Command_ResetUserPassword &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1812
void logDebugMessage(const QString &message) override
Definition serversocketinterface.cpp:188
Response::ResponseCode cmdReplayDownloadByGameId(const Command_ReplayDownloadByGameId &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2283
void incTxBytes(qint64 amount)
QString createHashForReplay(int gameId)
Definition serversocketinterface.cpp:893
void removeSaidMessages(const QString &userName, int amount)
Definition serversocketinterface.cpp:1152
Response::ResponseCode cmdDeckDelDir(const Command_DeckDelDir &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:609
Response::ResponseCode cmdGetBanHistory(const Command_GetBanHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1105
void onLogin(ResponseContainer &rc) override
Definition serversocketinterface.cpp:1974
QList< ServerMessage > outputQueue
Definition serversocketinterface.h:88
Response::ResponseCode cmdUpdateAdminNotes(const Command_UpdateAdminNotes &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:3362
virtual void flushOutputQueue()=0
Response::ResponseCode cmdActivateAccount(const Command_Activate &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:2510
void catchSocketError(QAbstractSocket::SocketError socketError)
Definition serversocketinterface.cpp:167
Response::ResponseCode cmdForgotPasswordReset(const Command_ForgotPasswordReset &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:2940
Response::ResponseCode cmdReport(const Command_Report &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:3056
DeckList * getDeckFromDatabase(int deckId)
Response::ResponseCode cmdGetWarnHistory(const Command_GetWarnHistory &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1137
Response::ResponseCode cmdReportStats(const Command_ReportStats &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1646
Response::ResponseCode cmdAddCardArtRule(const Command_AddCardArtRule &cmd, ResponseContainer &)
Definition serversocketinterface.cpp:2737
Response::ResponseCode cmdWarnUser(const Command_WarnUser &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1159
Response::ResponseCode cmdGetUserAlts(const Command_GetUserAlts &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1775
Response::ResponseCode continuePasswordRequest(const QString &userName, const QString &clientId, ResponseContainer &rc, bool challenged=false)
Definition serversocketinterface.cpp:2890
Servatrice * servatrice
Definition serversocketinterface.h:87
void sendPendingReportNotifications(ResponseContainer &rc)
Definition serversocketinterface.cpp:1898
Response::ResponseCode cmdListCardArtRules(const Command_ListCardArtRules &, ResponseContainer &rc)
Definition serversocketinterface.cpp:2792
Response::ResponseCode cmdReplayModifyMatch(const Command_ReplayModifyMatch &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:838
Response::ResponseCode cmdBanFromServer(const Command_BanFromServer &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:1204
virtual QHostAddress getPeerAddress() const =0
virtual void flushSocket()=0
Response::ResponseCode cmdRemoveFromList(const Command_RemoveFromList &cmd, ResponseContainer &rc)
Definition serversocketinterface.cpp:393
Represents a complete deck, including metadata, zones, cards, and sideboard plans.
Definition deck_list.h:63
Definition server_response_containers.h:89
Definition servatrice_database_interface.h:21
Definition servatrice.h:134
Server_ProtocolHandler(Server *_server, Server_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition server_protocolhandler.cpp:32
TcpServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=0)
Definition serversocketinterface.cpp:3381
QByteArray inputBuffer
Definition serversocketinterface.h:220
QHostAddress getPeerAddress() const
Definition serversocketinterface.h:205
void readClient()
Definition serversocketinterface.cpp:3462
void flushSocket()
Definition serversocketinterface.h:230
void writeToSocket(QByteArray &data)
Definition serversocketinterface.h:226
bool messageInProgress
Definition serversocketinterface.h:221
bool handshakeStarted
Definition serversocketinterface.h:222
QString getConnectionType() const
Definition serversocketinterface.h:213
void initSessionDeprecated()
Definition serversocketinterface.cpp:3413
QString getAddress() const
Definition serversocketinterface.h:209
QTcpSocket * socket
Definition serversocketinterface.h:219
~TcpServerSocketInterface()
Definition serversocketinterface.cpp:3395
void flushOutputQueue()
Definition serversocketinterface.cpp:3423
int messageLength
Definition serversocketinterface.h:223
void initConnection(int socketDescriptor)
Definition serversocketinterface.cpp:3402
bool initTcpSession()
Definition serversocketinterface.cpp:3532
QString getConnectionType() const
Definition serversocketinterface.h:260
QString getAddress() const
Definition serversocketinterface.h:256
void binaryMessageReceived(const QByteArray &message)
Definition serversocketinterface.cpp:3676
WebsocketServerSocketInterface(Servatrice *_server, Servatrice_DatabaseInterface *_databaseInterface, QObject *parent=nullptr)
Definition serversocketinterface.cpp:3559
void flushOutputQueue()
Definition serversocketinterface.cpp:3641
~WebsocketServerSocketInterface()
Definition serversocketinterface.cpp:3566
QHostAddress getPeerAddress() const
Definition serversocketinterface.h:252
QHostAddress address
Definition serversocketinterface.h:267
void initConnection(void *_socket)
Definition serversocketinterface.cpp:3573
void flushSocket()
Definition serversocketinterface.h:274
QWebSocket * socket
Definition serversocketinterface.h:266
bool initWebsocketSession()
Definition serversocketinterface.cpp:3613
void writeToSocket(QByteArray &data)
Definition serversocketinterface.h:270
static constexpr int amount
Definition deck_hash_performance_test.cpp:5
Definition admin_commands.proto:2
Definition session_commands.proto:147
Definition session_commands.proto:158
Definition session_commands.proto:164
Definition session_commands.proto:135
Definition moderator_commands.proto:112
Definition session_commands.proto:85
Definition admin_commands.proto:29
Definition moderator_commands.proto:31
Definition command_deck_del_dir.proto:3
Definition command_deck_del.proto:3
Definition command_deck_download.proto:3
Definition command_deck_list.proto:3
Definition command_deck_new_dir.proto:3
Definition command_deck_upload.proto:3
Definition moderator_commands.proto:92
Definition session_commands.proto:191
Definition session_commands.proto:174
Definition session_commands.proto:181
Definition moderator_commands.proto:99
Definition moderator_commands.proto:43
Definition moderator_commands.proto:146
Definition moderator_commands.proto:140
Definition moderator_commands.proto:133
Definition moderator_commands.proto:58
Definition moderator_commands.proto:64
Definition moderator_commands.proto:85
Definition moderator_commands.proto:128
Definition session_commands.proto:112
Definition admin_commands.proto:24
Definition moderator_commands.proto:121
Definition session_commands.proto:92
Definition moderator_commands.proto:151
Definition command_replay_delete_match.proto:3
Definition command_replay_download_by_game_id.proto:3
Definition command_replay_download.proto:3
Definition command_replay_get_code.proto:3
Definition command_replay_list.proto:3
Definition command_replay_modify_match.proto:3
Definition command_replay_submit_code.proto:3
Definition command_report_add_comment.proto:3
Definition command_report_assign.proto:3
Definition command_report_details.proto:3
Definition command_report_list.proto:3
Definition command_report_my_list.proto:3
Definition command_report_resolve.proto:3
Definition command_report_stats.proto:3
Definition command_report_user_info.proto:3
Definition command_report.proto:3
Definition session_commands.proto:199
Definition admin_commands.proto:37
Definition session_commands.proto:205
Definition admin_commands.proto:17
Definition moderator_commands.proto:105
Definition admin_commands.proto:12
Definition moderator_commands.proto:72
Definition moderator_commands.proto:49
Definition moderator_commands.proto:2
ResponseCode
Definition response.proto:14
Definition serverinfo_deckstorage.proto:5
Definition server_message.proto:6
Definition session_commands.proto:2