Air-Trap 1.0.0
A multiplayer R-Type clone game engine built with C++23 and ECS architecture
Loading...
Searching...
No Matches
Session.hpp
Go to the documentation of this file.
1
8#ifndef RTYPE_NETWORK_SESSION_HPP_
9 #define RTYPE_NETWORK_SESSION_HPP_
10
11 #include <asio.hpp>
12 #include <cstdint>
13 #include <memory>
14 #include <deque>
15 #include <mutex>
19
20namespace rtp::net
21{
22 class Session : public std::enable_shared_from_this<Session> {
23 public:
31 Session(uint32_t id,
32 asio::ip::tcp::socket socket,
33 asio::ip::udp::socket& serverUdpSocket,
34 IEventPublisher &publisher);
35
39 ~Session();
40
45 void start(void);
46
51 void stop(void);
52
58 void send(const Packet& packet, NetworkMode mode);
59
64 void setId(uint32_t id);
65
70 uint32_t getId() const;
71
76 asio::ip::tcp::endpoint getTcpEndpoint() const;
77
82 void setUdpEndpoint(const asio::ip::udp::endpoint& endpoint);
83
88 asio::ip::udp::endpoint getUdpEndpoint() const { return _udpEndpoint; }
89
90 private:
95 asio::awaitable<void> reader(void);
96
101 asio::awaitable<void> writer(void);
102
103 private:
104 uint32_t _id;
105 bool _stopped = false;
107 asio::ip::tcp::socket _socket;
108 asio::ip::udp::socket& _serverUdpSocket;
111 asio::ip::udp::endpoint _udpEndpoint{};
112 bool _hasUdp = false;
114 std::mutex _writeMutex;
115 asio::steady_timer _timer;
116 std::deque<Packet> _writeQueue{};
117 };
118}
119
120#endif /* !RTYPE_NETWORK_SESSION_HPP_ */
Network packet implementation for R-Type protocol.
Interface for network event handling.
Network packet with header and serializable body.
Definition Packet.hpp:471
asio::ip::udp::socket & _serverUdpSocket
Reference to the server's UDP socket.
Definition Session.hpp:108
asio::ip::tcp::endpoint getTcpEndpoint() const
Set the TCP endpoint for the session.
Definition Session.cpp:73
void setUdpEndpoint(const asio::ip::udp::endpoint &endpoint)
Set the UDP endpoint for the session.
Definition Session.cpp:77
uint32_t getId() const
Get the unique identifier for the session.
Definition Session.cpp:69
bool _stopped
Flag indicating if the session is stopped.
Definition Session.hpp:105
std::mutex _writeMutex
Mutex for synchronizing write operations.
Definition Session.hpp:114
asio::steady_timer _timer
Timer for managing write operations.
Definition Session.hpp:115
bool _hasUdp
Flag indicating if UDP endpoint is set.
Definition Session.hpp:112
asio::ip::tcp::socket _socket
TCP socket associated with the session.
Definition Session.hpp:107
void setId(uint32_t id)
Set the unique identifier for the session.
Definition Session.cpp:65
void send(const Packet &packet, NetworkMode mode)
Send a packet to the client.
Definition Session.cpp:51
void stop(void)
Stop the session's operations.
Definition Session.cpp:43
asio::ip::udp::endpoint getUdpEndpoint() const
Get the UDP endpoint for the session.
Definition Session.hpp:88
asio::awaitable< void > writer(void)
Asynchronous writer coroutine for the session.
Definition Session.cpp:116
std::deque< Packet > _writeQueue
Queue of packets to be written to the TCP socket.
Definition Session.hpp:116
uint32_t _id
Unique identifier for the session.
Definition Session.hpp:104
~Session()
Destructor for Session.
Definition Session.cpp:29
IEventPublisher & _publisher
Reference to the event publisher for network events.
Definition Session.hpp:109
asio::ip::udp::endpoint _udpEndpoint
UDP endpoint associated with the session.
Definition Session.hpp:111
void start(void)
Start the session's read and write operations.
Definition Session.cpp:33
asio::awaitable< void > reader(void)
Asynchronous reader coroutine for the session.
Definition Session.cpp:86
File : IEventPublisher.hpp License: MIT Author : Elias Josué HAJJAR LLAUQUEN elias-josue....
NetworkMode
Enum representing network transmission modes.
Definition INetwork.hpp:25