|
Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
|
Implementation ASIO du serveur réseau (TCP + UDP) More...
#include <ServerNetwork.hpp>
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::NetworkEvent > | pollEvent (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. | |
Implementation ASIO du serveur réseau (TCP + UDP)
Definition at line 35 of file ServerNetwork.hpp.
| rtp::server::ServerNetwork::ServerNetwork | ( | uint16_t | port | ) |
Constructor for ServerNetwork.
| port | Port number to start the server on |
Definition at line 17 of file ServerNetwork.cpp.
References rtp::log::info().
|
override |
|
private |
Accept incoming TCP connections.
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().
| void rtp::server::ServerNetwork::broadcastPacket | ( | const net::Packet & | packet, |
| net::NetworkMode | mode | ||
| ) |
Broadcast a packet to all connected sessions.
| packet | Packet to broadcast |
| mode | Network mode (TCP or UDP) |
Definition at line 71 of file ServerNetwork.cpp.
References _sessions, and _sessionsMutex.
Referenced by rtp::server::GameManager::handlePlayerDisconnect().
|
overridevirtual |
Poll for a network event.
Implements rtp::net::INetwork.
Definition at line 79 of file ServerNetwork.cpp.
References _eventQueue, and _eventQueueMutex.
Referenced by rtp::server::GameManager::processNetworkEvents().
|
overridevirtual |
Publish a network event to be processed.
| event | NetworkEvent to publish |
Implements rtp::net::IEventPublisher.
Definition at line 90 of file ServerNetwork.cpp.
References _eventQueue, and _eventQueueMutex.
Referenced by receiveUdpPacket().
|
private |
Receive incoming UDP packets.
Definition at line 136 of file ServerNetwork.cpp.
References _sessions, _sessionsMutex, _udpBuffer, _udpEndpointToSessionId, _udpMapMutex, _udpRemoteEndpoint, _udpSocket, rtp::net::Header::ackId, rtp::net::Packet::body, rtp::net::Header::bodySize, rtp::log::error(), rtp::net::Packet::from_network(), rtp::net::Packet::header, rtp::net::Hello, rtp::log::info(), rtp::net::Header::magic, rtp::net::MAGIC_NUMBER, rtp::net::Header::opCode, publishEvent(), receiveUdpPacket(), rtp::net::Header::sequenceId, and rtp::net::Header::sessionId.
Referenced by receiveUdpPacket(), and start().
| void rtp::server::ServerNetwork::sendPacket | ( | uint32_t | sessionId, |
| const net::Packet & | packet, | ||
| net::NetworkMode | mode | ||
| ) |
Send a packet to a specific session.
| sessionId | ID of the session to send the packet to |
| packet | Packet to send |
| mode | Network mode (TCP or UDP) |
Definition at line 62 of file ServerNetwork.cpp.
References _sessions, and _sessionsMutex.
Referenced by rtp::server::GameManager::handleChatCommand(), rtp::server::GameManager::handleCreateRoom(), rtp::server::GameManager::handleJoinRoom(), rtp::server::GameManager::handlePing(), rtp::server::GameManager::handleRoomChatSended(), rtp::server::RoomSystem::joinRoom(), rtp::server::RoomSystem::launchReadyRooms(), rtp::server::RoomSystem::listAllRooms(), rtp::server::GameManager::sendChatToSession(), rtp::server::AuthSystem::sendLoginResponse(), rtp::server::NetworkSyncSystem::sendPacketToEntity(), rtp::server::NetworkSyncSystem::sendPacketToSession(), rtp::server::NetworkSyncSystem::sendPacketToSessions(), rtp::server::AuthSystem::sendRegisterResponse(), and rtp::server::GameManager::sendSystemMessageToRoom().
|
overridevirtual |
Start the network server.
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().
|
overridevirtual |
Stop the network server.
Implements rtp::net::INetwork.
Definition at line 49 of file ServerNetwork.cpp.
References _acceptor, _ioContext, _ioThread, _udpSocket, and rtp::log::info().
Referenced by ~ServerNetwork().
|
private |
TCP acceptor for incoming connections.
Definition at line 102 of file ServerNetwork.hpp.
Referenced by acceptConnection(), and stop().
|
private |
Queue of network events to be processed.
Definition at line 110 of file ServerNetwork.hpp.
Referenced by pollEvent(), and publishEvent().
|
private |
Mutex for protecting access to the event queue.
Definition at line 111 of file ServerNetwork.hpp.
Referenced by pollEvent(), and publishEvent().
|
private |
ASIO I/O context for managing asynchronous operations.
Definition at line 101 of file ServerNetwork.hpp.
Referenced by acceptConnection(), start(), and stop().
|
private |
Thread running the ASIO I/O context.
Definition at line 104 of file ServerNetwork.hpp.
|
private |
Next session ID to assign to a new connection.
Definition at line 113 of file ServerNetwork.hpp.
Referenced by acceptConnection().
|
private |
Map of active sessions indexed by session ID.
Definition at line 107 of file ServerNetwork.hpp.
Referenced by acceptConnection(), broadcastPacket(), receiveUdpPacket(), and sendPacket().
|
private |
Mutex for protecting access to the sessions map.
Definition at line 108 of file ServerNetwork.hpp.
Referenced by acceptConnection(), broadcastPacket(), receiveUdpPacket(), and sendPacket().
|
private |
Buffer for receiving UDP packets.
Definition at line 119 of file ServerNetwork.hpp.
Referenced by receiveUdpPacket().
|
private |
Map of UDP endpoints to session IDs.
Definition at line 116 of file ServerNetwork.hpp.
Referenced by receiveUdpPacket().
|
private |
Mutex for protecting access to the UDP endpoint map.
Definition at line 117 of file ServerNetwork.hpp.
Referenced by receiveUdpPacket().
|
private |
Remote endpoint for the last received UDP packet.
Definition at line 120 of file ServerNetwork.hpp.
Referenced by receiveUdpPacket().
|
private |
UDP socket for receiving and sending datagrams.
Definition at line 103 of file ServerNetwork.hpp.
Referenced by acceptConnection(), receiveUdpPacket(), and stop().