Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
abstract_client.h
Go to the documentation of this file.
1
6
7#ifndef ABSTRACTCLIENT_H
8#define ABSTRACTCLIENT_H
9
10#include "latency_tracker.h"
11
12#include <QElapsedTimer>
13#include <QLoggingCategory>
14#include <QMap>
15#include <QMutex>
16#include <QMutexLocker>
17#include <QObject>
18#include <QString>
19
20// IWYU pragma: keep
21// ServerInfo_User appears in signal signatures, including inside QList, so the
22// moc-generated code needs the complete type.
23#include <QtGlobal>
24#include <libcockatrice/protocol/pb/serverinfo_user.pb.h>
25#include <qtmetamacros.h>
26
27namespace google
28{
29namespace protobuf
30{
31class Message;
32} // namespace protobuf
33} // namespace google
34template <typename T> class QList;
35
36inline Q_LOGGING_CATEGORY(AbstractClientLog, "abstract_client");
37
38class PendingCommand;
40class RoomEvent;
42class ServerMessage;
44class Event_AddToList;
47class Event_UserLeft;
49class Event_ListRooms;
56
71
72class AbstractClient : public QObject
73{
74 Q_OBJECT
75signals:
77 void maxPingTime(int seconds, int maxSeconds);
78
89 void pingStatsUpdated(const LatencyTracker::Stats &stats, const QList<int> &samplesMs);
90
91 // Room events
92 void roomEventReceived(const RoomEvent &event);
93 // Game events
95 // Session events
108 void userInfoChanged(const ServerInfo_User &userInfo);
115
117
118private:
120 mutable QMutex clientMutex;
123 QElapsedTimer statsEmitClock;
125
126 void recordLatency(PendingCommand &pend);
127private slots:
129protected slots:
130 void processProtocolItem(const ServerMessage &item);
131
132protected:
137 void setStatus(ClientStatus _status);
139 {
140 return nextCmdId++;
141 }
142 virtual void sendCommandContainer(const CommandContainer &cont) = 0;
143
144public:
145 explicit AbstractClient(QObject *parent = nullptr);
146 ~AbstractClient() override;
147
149 {
150 QMutexLocker locker(&clientMutex);
151 return status;
152 }
153 void sendCommand(const CommandContainer &cont);
154 void sendCommand(PendingCommand *pend);
155
164 void clearLatencyStats();
165
167 {
169 }
174 const QString &getUserName() const
175 {
176 return userName;
177 }
178
184 virtual QString serverName() const
185 {
186 return {};
187 }
188 virtual quint16 serverPort() const
189 {
190 return 0;
191 }
192
193 static PendingCommand *prepareSessionCommand(const ::google::protobuf::Message &cmd);
194 static PendingCommand *prepareRoomCommand(const ::google::protobuf::Message &cmd, int roomId);
195 static PendingCommand *prepareModeratorCommand(const ::google::protobuf::Message &cmd);
196 static PendingCommand *prepareAdminCommand(const ::google::protobuf::Message &cmd);
197 static PendingCommand *prepareDeveloperCommand(const ::google::protobuf::Message &cmd);
198
200};
201
202#endif
ClientStatus
Definition abstract_client.h:58
@ StatusLoggingIn
Definition abstract_client.h:64
@ StatusLoggedIn
Definition abstract_client.h:65
@ StatusActivating
Definition abstract_client.h:63
@ StatusRequestingForgotPassword
Definition abstract_client.h:66
@ StatusConnecting
Definition abstract_client.h:61
@ StatusDisconnecting
Definition abstract_client.h:60
@ StatusDisconnected
Definition abstract_client.h:59
@ StatusSubmitForgotPasswordReset
Definition abstract_client.h:67
@ StatusSubmitForgotPasswordChallenge
Definition abstract_client.h:68
@ StatusGettingPasswordSalt
Definition abstract_client.h:69
@ StatusRegistering
Definition abstract_client.h:62
void roomEventReceived(const RoomEvent &event)
void userMessageEventReceived(const Event_UserMessage &event)
static PendingCommand * prepareAdminCommand(const ::google::protobuf::Message &cmd)
Definition abstract_client.cpp:269
void addToListEventReceived(const Event_AddToList &event)
void registerAccepted()
QString email
Definition abstract_client.h:134
void clearLatencyStats()
Drops all recorded round-trip samples and resets the stats emission throttle, emitting zeroed stats s...
Definition abstract_client.cpp:237
void removeFromListEventReceived(const Event_RemoveFromList &event)
void gameEventContainerReceived(const GameEventContainer &event)
void serverMessageEventReceived(const Event_ServerMessage &event)
void gameJoinedEventReceived(const Event_GameJoined &event)
bool getServerSupportsChallengeResponse() const
Definition abstract_client.h:170
void notifyUserEventReceived(const Event_NotifyUser &event)
QMap< QString, bool > clientFeatures
Definition abstract_client.h:199
bool getServerSupportsPasswordHash() const
Definition abstract_client.h:166
void ignoreListReceived(const QList< ServerInfo_User > &ignoreList)
void processProtocolItem(const ServerMessage &item)
Definition abstract_client.cpp:83
bool serverSupportsPasswordHash
Definition abstract_client.h:135
QString userName
Definition abstract_client.h:134
QString realName
Definition abstract_client.h:134
LatencyTracker latencyTracker
Definition abstract_client.h:122
void sendCommand(const CommandContainer &cont)
Definition abstract_client.cpp:169
virtual QString serverName() const
Returns the server address configured for the current connection.
Definition abstract_client.h:184
void buddyListReceived(const QList< ServerInfo_User > &buddyList)
void serverIdentificationEventReceived(const Event_ServerIdentification &event)
int nextCmdId
Definition abstract_client.h:119
QString token
Definition abstract_client.h:134
void connectionClosedEventReceived(const Event_ConnectionClosed &event)
int getNewCmdId()
Definition abstract_client.h:138
void maxPingTime(int seconds, int maxSeconds)
static PendingCommand * prepareModeratorCommand(const ::google::protobuf::Message &cmd)
Definition abstract_client.cpp:261
QMutex clientMutex
Definition abstract_client.h:120
QString country
Definition abstract_client.h:134
void replayAddedEventReceived(const Event_ReplayAdded &event)
void listRoomsEventReceived(const Event_ListRooms &event)
void statusChanged(ClientStatus _status)
void userInfoChanged(const ServerInfo_User &userInfo)
void setStatus(ClientStatus _status)
Definition abstract_client.cpp:160
void pingStatsUpdated(const LatencyTracker::Stats &stats, const QList< int > &samplesMs)
Aggregated round-trip statistics and a chronological snapshot of the rolling window,...
AbstractClient(QObject *parent=nullptr)
Definition abstract_client.cpp:43
bool serverSupportsChallengeResponse
Definition abstract_client.h:136
void sigQueuePendingCommand(PendingCommand *pend)
static PendingCommand * prepareDeveloperCommand(const ::google::protobuf::Message &cmd)
Definition abstract_client.cpp:277
QString password
Definition abstract_client.h:134
bool statsEmitClockStarted
Definition abstract_client.h:124
ClientStatus getStatus() const
Definition abstract_client.h:148
QElapsedTimer statsEmitClock
Definition abstract_client.h:123
const QString & getUserName() const
Definition abstract_client.h:174
QMap< int, PendingCommand * > pendingCommands
Definition abstract_client.h:133
virtual void sendCommandContainer(const CommandContainer &cont)=0
virtual quint16 serverPort() const
Definition abstract_client.h:188
ClientStatus status
Definition abstract_client.h:121
void serverShutdownEventReceived(const Event_ServerShutdown &event)
void activateAccepted()
void registerAcceptedNeedsActivate()
void queuePendingCommand(PendingCommand *pend)
Definition abstract_client.cpp:180
void userJoinedEventReceived(const Event_UserJoined &event)
static PendingCommand * prepareRoomCommand(const ::google::protobuf::Message &cmd, int roomId)
Definition abstract_client.cpp:252
void recordLatency(PendingCommand &pend)
Definition abstract_client.cpp:200
void userLeftEventReceived(const Event_UserLeft &event)
static PendingCommand * prepareSessionCommand(const ::google::protobuf::Message &cmd)
Definition abstract_client.cpp:244
Fixed-capacity rolling window of network round-trip time samples.
Definition latency_tracker.h:24
Definition pending_command.h:20
Definition remote_connection_controller.h:20
Definition game.h:18
Q_LOGGING_CATEGORY(CrashReportLog, "crash_report")
Definition game_event_handler.h:57
Definition game_event_handler.h:55
Definition commands.proto:8
Definition event_add_to_list.proto:4
Definition event_connection_closed.proto:3
Definition event_game_joined.proto:5
Definition event_list_rooms.proto:4
Definition event_notify_user.proto:3
Definition event_remove_from_list.proto:3
Definition event_replay_added.proto:4
Definition event_server_identification.proto:3
Definition event_server_message.proto:3
Definition event_server_shutdown.proto:3
Definition event_user_joined.proto:4
Definition event_user_left.proto:3
Definition event_user_message.proto:3
Definition game_event_container.proto:4
Definition latency_tracker.h:29
Definition room_event.proto:2
Definition serverinfo_user.proto:2
Definition server_message.proto:6