ConnectX 3.0
ConnectX Game Suite
Loading...
Searching...
No Matches
game_server.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <cstdint>
5#include <map>
6#include <memory>
7#include <mutex>
8#include <queue>
9#include <sockpp/tcp_acceptor.h>
10#include <thread>
11
12#include "protocol/protocol.hpp"
13#include "server/connection.hpp"
16
22{
23public:
24 explicit GameServer(uint16_t port = Protocol::DEFAULT_PORT);
26
30 void start();
31
35 void stop();
36
40 bool isRunning() const { return running_; }
41
42private:
46 void acceptConnections();
47
51 void handleConnection(std::shared_ptr<Connection> conn);
52
56 void onMessage(std::shared_ptr<Connection> conn, const std::string &data);
57
61 void onDisconnect(uint32_t connection_id);
62
63 // Message handlers
64 void handleConnectRequest(std::shared_ptr<Connection> conn, const std::string &payload);
65 void handleJoinGame(std::shared_ptr<Connection> conn, const std::string &payload);
66 void handleListGames(std::shared_ptr<Connection> conn, const std::string &payload);
67 void handleDisconnect(std::shared_ptr<Connection> conn, const std::string &payload);
68 void handleMakeMove(std::shared_ptr<Connection> conn, const std::string &payload);
69 void handleCreateGame(std::shared_ptr<Connection> conn, const std::string &payload);
70
71 // Helper functions
72 void sendError(std::shared_ptr<Connection> conn, uint16_t error_code,
73 const std::string &message);
74 void sendWrappedMessage(std::shared_ptr<Connection> conn,
75 MessageType type, const std::string &payload);
76 void broadcastGameState(uint32_t game_id);
77 uint32_t createGame(uint8_t rows, uint8_t cols, uint8_t num_players,
78 uint8_t connect_length, std::string game_name = "");
79 GameInfo getGameInfo(uint32_t game_id, const GameSession &game);
80 GameStateUpdate createGameStateUpdate(const GameSession &game);
81 void skipAbandonedPlayers(const std::shared_ptr<GameSession> &game);
82
83 uint16_t port_;
84
85 sockpp::tcp_acceptor acceptor_;
86 SessionManager session_manager_;
87
88 std::map<uint32_t, std::shared_ptr<Connection>> connections_;
89 std::map<uint32_t, std::shared_ptr<GameSession>> games_;
90
91 std::atomic<bool> running_;
92 std::queue<uint32_t> free_connection_ids_;
93 std::queue<uint32_t> free_game_ids_;
94
95 std::mutex connections_mutex_;
96 std::mutex games_mutex_;
97};
Definition game_server.hpp:22
void stop()
Definition game_server.cpp:40
~GameServer()
Definition game_server.cpp:11
bool isRunning() const
Definition game_server.hpp:40
void start()
Definition game_server.cpp:16
Definition game_session.hpp:12
Definition session_manager.hpp:29
MessageType
Definition messagetype.hpp:14
constexpr uint16_t DEFAULT_PORT
Definition constants.hpp:11
Definition messages.hpp:125
Definition messages.hpp:83