Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
rtp::server::ServerNetwork Class Reference

Implementation ASIO du serveur réseau (TCP + UDP) More...

#include <ServerNetwork.hpp>

Inheritance diagram for rtp::server::ServerNetwork:
Collaboration diagram for rtp::server::ServerNetwork:

Public Member Functions

 ServerNetwork (uint16_t port)
 Constructor for ServerNetwork.
 
 ~ServerNetwork () override
 Destructor for ServerNetwork.
 
void start (void) override
 Start the network server.
 
void stop (void) override
 Stop the network server.
 
void sendPacket (uint32_t sessionId, const net::Packet &packet, net::NetworkMode mode)
 Send a packet to a specific session.
 
void broadcastPacket (const net::Packet &packet, net::NetworkMode mode)
 Broadcast a packet to all connected sessions.
 
std::optional< net::NetworkEventpollEvent (void) override
 Poll for a network event.
 
void publishEvent (net::NetworkEvent event) override
 Publish a network event to be processed.
 
- Public Member Functions inherited from rtp::net::INetwork
virtual ~INetwork ()=default
 Virtual destructor.
 
- Public Member Functions inherited from rtp::net::IEventPublisher
virtual ~IEventPublisher ()=default
 Virtual default destructor.
 

Private Member Functions

void acceptConnection ()
 Accept incoming TCP connections.
 
void receiveUdpPacket ()
 Receive incoming UDP packets.
 

Private Attributes

asio::io_context _ioContext
 ASIO I/O context for managing asynchronous operations.
 
asio::ip::tcp::acceptor _acceptor
 TCP acceptor for incoming connections.
 
asio::ip::udp::socket _udpSocket
 UDP socket for receiving and sending datagrams.
 
std::thread _ioThread
 Thread running the ASIO I/O context.
 
std::unordered_map< uint32_t, std::shared_ptr< net::Session > > _sessions
 Map of active sessions indexed by session ID.
 
std::mutex _sessionsMutex
 Mutex for protecting access to the sessions map.
 
std::queue< net::NetworkEvent_eventQueue
 Queue of network events to be processed.
 
std::mutex _eventQueueMutex
 Mutex for protecting access to the event queue.
 
uint32_t _nextSessionId
 Next session ID to assign to a new connection.
 
std::unordered_map< asio::ip::udp::endpoint, uint32_t > _udpEndpointToSessionId
 Map of UDP endpoints to session IDs.
 
std::mutex _udpMapMutex
 Mutex for protecting access to the UDP endpoint map.
 
std::array< char, 4096 > _udpBuffer
 Buffer for receiving UDP packets.
 
asio::ip::udp::endpoint _udpRemoteEndpoint
 Remote endpoint for the last received UDP packet.
 

Detailed Description

Implementation ASIO du serveur réseau (TCP + UDP)

Definition at line 35 of file ServerNetwork.hpp.

Constructor & Destructor Documentation

◆ ServerNetwork()

rtp::server::ServerNetwork::ServerNetwork ( uint16_t  port)

Constructor for ServerNetwork.

Parameters
portPort number to start the server on

Definition at line 17 of file ServerNetwork.cpp.

References rtp::log::info().

◆ ~ServerNetwork()

rtp::server::ServerNetwork::~ServerNetwork ( )
override

Destructor for ServerNetwork.

Definition at line 26 of file ServerNetwork.cpp.

References stop().

Member Function Documentation

◆ acceptConnection()

void rtp::server::ServerNetwork::acceptConnection ( )
private

Accept incoming TCP connections.

Note
Initiates an asynchronous accept operation

Definition at line 100 of file ServerNetwork.cpp.

References _acceptor, _ioContext, _nextSessionId, _sessions, _sessionsMutex, _udpSocket, acceptConnection(), rtp::log::error(), rtp::log::info(), rtp::net::TCP, and rtp::net::Welcome.

Referenced by acceptConnection(), and start().

◆ broadcastPacket()

void rtp::server::ServerNetwork::broadcastPacket ( const net::Packet packet,
net::NetworkMode  mode 
)

Broadcast a packet to all connected sessions.

Parameters
packetPacket to broadcast
modeNetwork mode (TCP or UDP)

Definition at line 71 of file ServerNetwork.cpp.

References _sessions, and _sessionsMutex.

Referenced by rtp::server::GameManager::handlePlayerDisconnect().

◆ pollEvent()

std::optional< net::NetworkEvent > rtp::server::ServerNetwork::pollEvent ( void  )
overridevirtual

Poll for a network event.

Returns
Optional NetworkEvent if available

Implements rtp::net::INetwork.

Definition at line 79 of file ServerNetwork.cpp.

References _eventQueue, and _eventQueueMutex.

Referenced by rtp::server::GameManager::processNetworkEvents().

◆ publishEvent()

void rtp::server::ServerNetwork::publishEvent ( net::NetworkEvent  event)
overridevirtual

Publish a network event to be processed.

Parameters
eventNetworkEvent to publish

Implements rtp::net::IEventPublisher.

Definition at line 90 of file ServerNetwork.cpp.

References _eventQueue, and _eventQueueMutex.

Referenced by receiveUdpPacket().

◆ receiveUdpPacket()

◆ sendPacket()

◆ start()

void rtp::server::ServerNetwork::start ( void  )
overridevirtual

Start the network server.

Note
Begins accepting connections and starts the I/O context thread

Implements rtp::net::INetwork.

Definition at line 31 of file ServerNetwork.cpp.

References _ioContext, _ioThread, acceptConnection(), rtp::log::error(), rtp::log::info(), and receiveUdpPacket().

Referenced by main().

◆ stop()

void rtp::server::ServerNetwork::stop ( void  )
overridevirtual

Stop the network server.

Note
Closes connections and stops the I/O context

Implements rtp::net::INetwork.

Definition at line 49 of file ServerNetwork.cpp.

References _acceptor, _ioContext, _ioThread, _udpSocket, and rtp::log::info().

Referenced by ~ServerNetwork().

Member Data Documentation

◆ _acceptor

asio::ip::tcp::acceptor rtp::server::ServerNetwork::_acceptor
private

TCP acceptor for incoming connections.

Definition at line 102 of file ServerNetwork.hpp.

Referenced by acceptConnection(), and stop().

◆ _eventQueue

std::queue<net::NetworkEvent> rtp::server::ServerNetwork::_eventQueue
private

Queue of network events to be processed.

Definition at line 110 of file ServerNetwork.hpp.

Referenced by pollEvent(), and publishEvent().

◆ _eventQueueMutex

std::mutex rtp::server::ServerNetwork::_eventQueueMutex
private

Mutex for protecting access to the event queue.

Definition at line 111 of file ServerNetwork.hpp.

Referenced by pollEvent(), and publishEvent().

◆ _ioContext

asio::io_context rtp::server::ServerNetwork::_ioContext
private

ASIO I/O context for managing asynchronous operations.

Definition at line 101 of file ServerNetwork.hpp.

Referenced by acceptConnection(), start(), and stop().

◆ _ioThread

std::thread rtp::server::ServerNetwork::_ioThread
private

Thread running the ASIO I/O context.

Definition at line 104 of file ServerNetwork.hpp.

Referenced by start(), and stop().

◆ _nextSessionId

uint32_t rtp::server::ServerNetwork::_nextSessionId
private

Next session ID to assign to a new connection.

Definition at line 113 of file ServerNetwork.hpp.

Referenced by acceptConnection().

◆ _sessions

std::unordered_map<uint32_t, std::shared_ptr<net::Session> > rtp::server::ServerNetwork::_sessions
private

Map of active sessions indexed by session ID.

Definition at line 107 of file ServerNetwork.hpp.

Referenced by acceptConnection(), broadcastPacket(), receiveUdpPacket(), and sendPacket().

◆ _sessionsMutex

std::mutex rtp::server::ServerNetwork::_sessionsMutex
private

Mutex for protecting access to the sessions map.

Definition at line 108 of file ServerNetwork.hpp.

Referenced by acceptConnection(), broadcastPacket(), receiveUdpPacket(), and sendPacket().

◆ _udpBuffer

std::array<char, 4096> rtp::server::ServerNetwork::_udpBuffer
private

Buffer for receiving UDP packets.

Definition at line 119 of file ServerNetwork.hpp.

Referenced by receiveUdpPacket().

◆ _udpEndpointToSessionId

std::unordered_map<asio::ip::udp::endpoint, uint32_t> rtp::server::ServerNetwork::_udpEndpointToSessionId
private

Map of UDP endpoints to session IDs.

Definition at line 116 of file ServerNetwork.hpp.

Referenced by receiveUdpPacket().

◆ _udpMapMutex

std::mutex rtp::server::ServerNetwork::_udpMapMutex
private

Mutex for protecting access to the UDP endpoint map.

Definition at line 117 of file ServerNetwork.hpp.

Referenced by receiveUdpPacket().

◆ _udpRemoteEndpoint

asio::ip::udp::endpoint rtp::server::ServerNetwork::_udpRemoteEndpoint
private

Remote endpoint for the last received UDP packet.

Definition at line 120 of file ServerNetwork.hpp.

Referenced by receiveUdpPacket().

◆ _udpSocket

asio::ip::udp::socket rtp::server::ServerNetwork::_udpSocket
private

UDP socket for receiving and sending datagrams.

Definition at line 103 of file ServerNetwork.hpp.

Referenced by acceptConnection(), receiveUdpPacket(), and stop().


The documentation for this class was generated from the following files: