R-Type  1.0.1.0
Rewrite of the R-Type game with networking ability
Loading...
Searching...
No Matches
GameServer.hpp
1/*
2** EPITECH PROJECT, 2023
3** GameServer.hpp
4** File description:
5** GameServer.hpp
6*/
7
8#ifndef R_TYPE_GAMESERVER_HPP
9#define R_TYPE_GAMESERVER_HPP
10
11#include "game/Game.hpp"
12#include <Packets.hpp>
13#include <saturnity/Saturnity.hpp>
14
15namespace rtype::server {
16 using namespace rtype::network; // NOLINT
17
18 class GameServer {
19 public:
20 explicit GameServer(const std::string &host, std::uint16_t tcpPort, std::uint16_t udpPort, int maxPlayers);
21
22 void init();
23 void start();
24 void stop();
25
26 const std::shared_ptr<sa::TCPServer> &getTcpServer() const { return _tcpServer; }
27 const std::shared_ptr<sa::UDPServer> &getUdpServer() const { return _udpServer; }
28 const std::shared_ptr<spdlog::logger> &getLogger() const { return _logger; }
29
30 void setTcpServer(const std::shared_ptr<sa::TCPServer> &tcpServer) { _tcpServer = tcpServer; }
31 void setUdpServer(const std::shared_ptr<sa::UDPServer> &udpServer) { _udpServer = udpServer; }
32 void setLogger(const std::shared_ptr<spdlog::logger> &logger) { _logger = logger; }
33
34 private:
35 std::shared_ptr<sa::PacketRegistry> _udpPacketRegistry;
36 std::shared_ptr<sa::PacketRegistry> _tcpPacketRegistry;
37 std::shared_ptr<sa::TCPServer> _tcpServer;
38 std::shared_ptr<sa::UDPServer> _udpServer;
39 std::shared_ptr<spdlog::logger> _logger;
40 std::string _host;
41 std::uint16_t _tcpPort;
42 std::uint16_t _udpPort;
43
44 std::uint32_t _globalId;
45
46 int _playerCount;
47 int _maxPlayers;
48 std::unordered_map<std::uint32_t, std::shared_ptr<game::Player>> _players;
49
50 void registerTcpCallbacks();
51 void registerUdpCallbacks();
52
53 void registerTcpPacketHandlers();
54 void registerUdpPacketHandlers();
55
56 void onTcpClientConnected(ConnectionToClientPtr &client);
57 void onTcpClientDisconnected(ConnectionToClientPtr &client);
58
59 void onUdpClientConnected(ConnectionToClientPtr &client);
60 void onUdpClientDisconnected(ConnectionToClientPtr &client);
61
62 void sync();
63
64 //
65 // TCP
66 //
67
68 void onPlayerHandshake(ConnectionToClientPtr &client, packet::C2SPlayerHandshake &packet);
69 void onClientDisconnecting(ConnectionToClientPtr &client, packet::C2SClientDisconnecting &packet);
70
71 //
72 // UDP
73 //
74
75 void onClientConnected(ConnectionToClientPtr &client, packet::C2SClientConnect &packet);
76
77 };
78} // namespace rtype::server
79
80#endif // R_TYPE_GAMESERVER_HPP
All packets used in the project.
Definition: C2SClientConnect.hpp:14
Definition: C2SClientDisconnecting.hpp:14
Definition: C2SPlayerHandshake.hpp:14
Definition: GameServer.hpp:18