40 std::vector<std::uint8_t>
data;
102 void connect(
const std::string &host, std::uint16_t port)
override;
116 [[nodiscard]]
const std::string
getName()
const override {
return "Network_Client"; }
135 [[nodiscard]] std::uint32_t
getSessionId()
const override;
147 [[nodiscard]] std::uint32_t
getLatency()
const override;
172 void sendToServer(
const std::vector<std::uint8_t> &data,
bool reliable =
false)
override;
258 void setOnGameStart(std::function<
void(std::uint32_t, std::uint32_t)> callback);
Thread-safe event bus implementation for inter-component communication.
Event structures and types for event-driven communication.
Network packet handler for RNP protocol.
This file contains the client network interface.
This file contains the network protocol.
High-performance UDP client implementation using ASIO library.
void sendDisconnect()
Send DISCONNECT packet to terminate connection.
std::chrono::milliseconds m_connectionTimeout
Timeout duration (15000ms)
std::string m_serverHost
Server hostname or IP address.
void setupPacketHandlers()
Setup packet handlers for all RNP packet types.
rnp::HandlerResult handleLobbyJoinResponse(const rnp::PacketLobbyJoinResponse &packet, const rnp::PacketContext &context)
Handle LOBBY_JOIN_RESPONSE packet.
void joinLobby(std::uint32_t lobbyId)
Join an existing lobby.
void setPlayerName(const std::string &playerName) override
Set player name for connection.
void sendPacketImmediate(const std::vector< std::uint8_t > &data)
Send packet immediately via UDP socket.
rnp::HandlerResult handlePing(const rnp::PacketPingPong &packet, const rnp::PacketContext &context)
Handle PING packet.
std::uint16_t m_serverTickRate
Server tick rate in Hz.
void setOnLobbyJoined(std::function< void(std::uint32_t, bool, rnp::ErrorCode, const rnp::LobbyInfo *)> callback)
Set callback for lobby join response.
std::unique_ptr< asio::ip::udp::socket > m_socket
UDP socket for network communication.
std::uint32_t getSessionId() const override
Get assigned session ID.
std::uint32_t m_clientCaps
Client capability flags.
std::array< std::uint8_t, 1024 > m_recvBuffer
Buffer for receiving UDP packets.
bool isInLobby() const
Check if player is in a lobby.
std::uint32_t m_sessionId
Assigned session ID from server.
const ConnectionStats & getStats() const
Get connection statistics.
rnp::HandlerResult handleDisconnect(const rnp::PacketDisconnect &packet, const rnp::PacketContext &context)
Handle DISCONNECT packet.
void networkThreadLoop() const
Main network thread loop.
std::uint32_t m_componentId
Component ID for event bus.
void disconnect() override
Disconnect from server.
std::atomic< bool > m_running
Network thread running state (atomic)
std::function< void(std::uint32_t, bool, rnp::ErrorCode, const rnp::LobbyInfo *)> m_onLobbyJoined
Lobby joined callback.
static rnp::HandlerResult handleError(const rnp::PacketError &packet, const rnp::PacketContext &context)
Handle ERROR packet.
rnp::HandlerResult handlePong(const rnp::PacketPingPong &packet, const rnp::PacketContext &context)
Handle PONG packet.
void sendPing()
Send PING packet for latency measurement.
rnp::HandlerResult handleLobbyUpdate(const rnp::PacketLobbyUpdate &packet, const rnp::PacketContext &context) const
Handle LOBBY_UPDATE packet.
std::function< void(std::uint32_t, bool, rnp::ErrorCode)> m_onLobbyCreated
Lobby created callback.
rnp::HandlerResult handleWorldState(const rnp::PacketWorldState &packet, const rnp::PacketContext &context) const
Handle WORLD_STATE packet.
rnp::HandlerResult handleConnectAccept(const rnp::PacketConnectAccept &packet, const rnp::PacketContext &context)
Handle CONNECT_ACCEPT packet.
void processSendQueue()
Process outgoing packet queue.
bool isConnected() const override
Check if client is connected to server.
rnp::HandlerResult handleLobbyCreateResponse(const rnp::PacketLobbyCreateResponse &packet, const rnp::PacketContext &context)
Handle LOBBY_CREATE_RESPONSE packet.
std::uint32_t m_latency
Round-trip time in milliseconds.
asio::ip::udp::endpoint m_senderEndpoint
Endpoint of last packet sender.
std::uint32_t m_currentLobbyId
Current lobby ID, 0 if not in lobby.
void setOnGameStart(std::function< void(std::uint32_t, std::uint32_t)> callback)
Set callback for game start notification.
std::uint16_t getServerTickRate() const override
Get server tick rate.
~AsioClient() override
Destructor.
std::atomic< ConnectionState > m_connectionState
Current connection state (atomic)
void update() override
Update client state (called each frame)
void setOnLobbyCreated(std::function< void(std::uint32_t, bool, rnp::ErrorCode)> callback)
Set callback for lobby creation response.
void sendPong(std::uint32_t nonce)
Send PONG response to server PING.
void sendToServer(const std::vector< std::uint8_t > &data, bool reliable=false) override
Send custom packet to server.
void leaveLobby()
Leave current lobby.
ConnectionState getConnectionState() const override
Get current connection state.
std::chrono::steady_clock::time_point m_lastServerResponse
Timestamp of last server packet.
void setOnLobbyListReceived(std::function< void(const std::vector< rnp::LobbyInfo > &)> callback)
Set callback for lobby list received.
void requestStartGame(std::uint32_t lobbyId)
Request to start the game (host only)
void sendConnect()
Send CONNECT packet to initiate connection.
std::function< void(std::uint32_t, std::uint32_t)> m_onGameStart
Game start callback.
rnp::HandlerResult handleLobbyListResponse(const rnp::PacketLobbyListResponse &packet, const rnp::PacketContext &context) const
Handle LOBBY_LIST_RESPONSE packet.
const std::string getName() const override
rnp::HandlerResult handleGameStart(const rnp::PacketGameStart &packet, const rnp::PacketContext &context) const
Handle GAME_START packet.
static std::uint32_t generatePingNonce()
Generate random ping nonce.
void requestLobbyList()
Request list of available lobbies from server.
std::chrono::steady_clock::time_point m_lastPingTime
Timestamp of last PING.
std::uint16_t m_serverPort
Server port number.
std::function< void(const rnp::LobbyInfo &)> m_onLobbyUpdated
Lobby updated callback.
void processBusEvent()
Process events from event bus.
std::unique_ptr< std::thread > m_networkThread
Dedicated network thread.
std::unique_ptr< rnp::HandlerPacket > m_packetHandler
RNP packet handler instance.
std::uint32_t m_lastPingNonce
Nonce of last PING sent.
void setOnLobbyUpdated(std::function< void(const rnp::LobbyInfo &)> callback)
Set callback for lobby updates.
std::string m_playerName
Player display name.
std::function< void(const std::vector< rnp::LobbyInfo > &)> m_onLobbyListReceived
Lobby list callback.
void connect(const std::string &host, std::uint16_t port) override
Connect to game server.
asio::ip::udp::endpoint m_serverEndpoint
Resolved server endpoint.
rnp::HandlerResult handleEntityEvent(const std::vector< rnp::EventRecord > &events, const rnp::PacketContext &context) const
Handle ENTITY_EVENT packet.
std::chrono::milliseconds m_pingInterval
Interval between pings (5000ms)
std::queue< QueuedPacket > m_sendQueue
Queue of packets waiting to be sent.
utl::PluginType getType() const override
void handleReceive(std::size_t bytesReceived)
Handle received packet data.
ConnectionStats m_stats
Connection statistics.
void updateConnectionManagement()
Update connection management state.
std::unique_ptr< asio::io_context > m_ioContext
ASIO I/O context for async operations.
void startReceive()
Start asynchronous receive operation.
utl::EventBus & m_eventBus
Event bus reference.
std::uint32_t getCurrentLobbyId() const
Get current lobby ID.
std::mutex m_sendQueueMutex
Mutex for send queue access.
std::uint32_t getLatency() const override
Get current latency to server.
void setClientCapabilities(std::uint32_t caps) override
Set client capability flags.
void createLobby(rnp::PacketLobbyCreate lobbyCreate)
Create a new lobby on server.
Interface for the client network.
Thread-safe event bus for decoupled component communication.
ConnectionState
Connection state enumeration.
HandlerResult
Packet processing result.
static constexpr std::uint32_t NETWORK_CLIENT
Connection statistics tracking.
std::uint32_t packetsSent
Total number of packets sent.
std::uint32_t packetsReceived
Total number of packets received.
std::chrono::steady_clock::time_point connectionTime
Timestamp when connection was established.
std::uint32_t packetsLost
Estimated number of lost packets.
std::uint32_t bytesTransferred
Total bytes transferred (sent + received)
Represents a packet queued for asynchronous transmission to server.
QueuedPacket(const std::vector< std::uint8_t > &d, const bool rel=false)
Constructor.
std::vector< std::uint8_t > data
Serialized packet data.
bool reliable
Whether packet requires reliable delivery.
Lobby information structure.
CONNECT_ACCEPT packet payload.
Context information for packet processing.
DISCONNECT packet payload.
GAME_START packet payload.
LOBBY_CREATE_RESPONSE packet payload.
LOBBY_CREATE packet payload.
LOBBY_JOIN_RESPONSE packet payload.
LOBBY_LIST_RESPONSE packet payload.
LOBBY_UPDATE packet payload.
PING/PONG packet payload.
WORLD_STATE packet payload.