GPR5100 - Rollback
Loading...
Searching...
No Matches
network_server.h
1#pragma once
2#include <SFML/Network/IpAddress.hpp>
3#include <SFML/Network/TcpListener.hpp>
4
5#include "network_client.h"
6#include "server.h"
7#include "game/game_globals.h"
8
9namespace game
10{
15{
16 ClientId clientId = INVALID_CLIENT_ID;
17 unsigned long long timeDifference = 0;
18 sf::IpAddress udpRemoteAddress;
19 unsigned short udpRemotePort = 0;
20};
21
25class NetworkServer final : public Server
26{
27public:
28 enum class PacketSocketSource
29 {
30 TCP,
31 UDP
32 };
33
34 void SendReliablePacket(std::unique_ptr<Packet> packet) override;
35
36 void SendUnreliablePacket(std::unique_ptr<Packet> packet) override;
37
38 void Begin() override;
39
40 void Update(sf::Time dt) override;
41
42 void End() override;
43
44 void SetTcpPort(unsigned short i);
45
46 [[nodiscard]] bool IsOpen() const;
47
48protected:
49 void SpawnNewPlayer(ClientId clientId, PlayerNumber playerNumber) override;
50
51private:
52 void ProcessReceivePacket(std::unique_ptr<Packet> packet,
53 PacketSocketSource packetSource,
54 sf::IpAddress address = "localhost",
55 unsigned short port = 0);
56 void ReceiveNetPacket(sf::Packet& packet, PacketSocketSource packetSource,
57 sf::IpAddress address = "localhost",
58 unsigned short port = 0);
59
60 enum ServerStatus
61 {
62 OPEN = 1u << 0u,
63 STARTED = 1u << 1u,
64 FIRST_PLAYER_CONNECT = 1u << 2u,
65 };
66 sf::UdpSocket udpSocket_;
67 sf::TcpListener tcpListener_;
68 std::array<sf::TcpSocket, maxPlayerNmb> tcpSockets_;
69
70 std::array<ClientInfo, maxPlayerNmb> clientInfoMap_{};
71
72
73 unsigned short tcpPort_ = 12345;
74 unsigned short udpPort_ = 12345;
75 std::uint32_t lastSocketIndex_ = 0;
76 std::uint8_t status_ = 0;
77
78#ifdef ENABLE_SQLITE
79 DebugDatabase db_;
80#endif
81};
82}
NetworkServer is a network server using SFML sockets.
Definition: network_server.h:26
Server is an interface to a network or simulated server. It owns a simple GameManager.
Definition: server.h:15
ClientId
ClientId is a type used to define the client identification. It is given by the server to clients.
Definition: game_globals.h:31
std::uint8_t PlayerNumber
PlayerNumber is a type used to define the number of the player. Starting from 0 to maxPlayerNmb.
Definition: game_globals.h:22
ClientInfo is a struct used by a network server to store all needed infos about a client.
Definition: network_server.h:15