10#include <sockpp/tcp_connector.h>
25 using ErrorCallback = std::function<void(uint16_t error_code,
const std::string &message)>;
40 bool connect(
const std::string &host, uint16_t port);
102 bool sendDisconnect(
const std::string &reason =
"Client disconnecting");
107 std::optional<ConnectResponse>
requestConnect(
const std::string &player_name,
int timeout_ms = 3000);
108 std::optional<CreateGameResponse>
requestCreateGame(
const GameConfig &config,
const std::string &name =
"",
int timeout_ms = 3000);
110 std::optional<JoinGameResponse>
requestJoinGame(uint32_t game_id,
int timeout_ms = 3000);
118 disconnected_callback_ = callback;
123 game_state_callback_ = callback;
128 move_result_callback_ = callback;
133 error_callback_ = callback;
152 auto it = std::find(state.
players.begin(), state.
players.end(), player_id);
155 return std::distance(state.
players.begin(), it);
163 const std::optional<GameInfo> &
getGameInfo()
const {
return game_info_; }
168 uint32_t
getGameId()
const {
return game_info_.has_value() ? game_info_->game_id : 0; }
173 std::string
getGameName()
const {
return game_info_.has_value() ? game_info_->game_name : std::string(); }
180 return current_state_;
190 return current_state_->current_player == player_id_;
195 sockpp::tcp_connector socket_;
196 std::atomic<bool> connected_;
197 std::atomic<bool> running_;
200 std::string session_token_;
202 std::optional<GameInfo> game_info_;
203 std::optional<GameStateUpdate> current_state_;
204 std::mutex state_mutex_;
207 std::mutex promise_mutex_;
208 std::unordered_map<MessageType, std::promise<std::string>> pending_promises_;
217 bool sendMessage(
MessageType type,
const std::string &payload);
218 std::optional<std::string> waitForResponse(
MessageType type, std::chrono::milliseconds timeout);
219 std::string readMessage();
220 bool writeMessage(
const std::string &message);
221 void processMessage(
const std::string &data);
224 void handleGameStateUpdate(
const std::string &payload);
225 void handleMoveResult(
const std::string &payload);
226 void handleError(
const std::string &payload);
bool sendListGames()
Definition client.cpp:170
const std::string & getSessionToken() const
Definition client.hpp:143
bool connect(const std::string &host, uint16_t port)
Definition client.cpp:23
void onMoveResult(MoveResultCallback callback)
Definition client.hpp:126
uint32_t getGameId() const
Definition client.hpp:168
std::string getGameName() const
Definition client.hpp:173
std::optional< ListGamesResponse > requestGamesList(int timeout_ms=3000)
Definition client.cpp:235
std::optional< ConnectResponse > requestConnect(const std::string &player_name, int timeout_ms=3000)
Definition client.cpp:191
bool sendConnectRequest(const std::string &player_name)
Definition client.cpp:127
bool sendMove(uint8_t column)
Definition client.cpp:136
const std::optional< GameInfo > & getGameInfo() const
Definition client.hpp:163
~Client()
Definition client.cpp:14
bool isMyTurn() const
Definition client.hpp:186
uint8_t getPlayerId() const
Definition client.hpp:148
std::optional< uint8_t > getPlayerIndex(const GameStateUpdate &state, uint8_t player_id)
Definition client.hpp:150
void disconnect()
Definition client.cpp:49
std::optional< JoinGameResponse > requestJoinGame(uint32_t game_id, int timeout_ms=3000)
Definition client.cpp:251
void stop()
Definition client.cpp:114
std::optional< CreateGameResponse > requestCreateGame(const GameConfig &config, const std::string &name="", int timeout_ms=3000)
Definition client.cpp:213
std::function< void(bool success, const std::string &message)> MoveResultCallback
Definition client.hpp:24
std::function< void(const GameStateUpdate &)> GameStateUpdateCallback
Definition client.hpp:23
bool isConnected() const
Definition client.hpp:50
std::function< void(uint16_t error_code, const std::string &message)> ErrorCallback
Definition client.hpp:25
void onGameStateUpdate(GameStateUpdateCallback callback)
Definition client.hpp:121
void run()
Definition client.cpp:75
bool sendCreateGame(const GameConfig &config, const std::string &name="")
Definition client.cpp:145
Client()
Definition client.cpp:7
void onError(ErrorCallback callback)
Definition client.hpp:131
const std::optional< GameStateUpdate > & getCurrentState() const
Definition client.hpp:178
std::function< void()> DisconnectedCallback
Definition client.hpp:22
bool sendJoinGame(uint32_t game_id)
Definition client.cpp:161
bool sendDisconnect(const std::string &reason="Client disconnecting")
Definition client.cpp:179
bool isRunning() const
Definition client.hpp:55
void onDisconnected(DisconnectedCallback callback)
Definition client.hpp:116
MessageType
Definition messagetype.hpp:14
Definition messages.hpp:113
Definition messages.hpp:83
std::vector< uint8_t > players
Definition messages.hpp:91