F4MP/tiltedcode/Code/client/Services/TransportService.h
Jous99 37b16f1547 code upload
codigo original de f4mp y tilted para referencias
2026-01-06 18:45:00 +01:00

63 lines
2 KiB
C++

#pragma once
#include "Events/ConnectedEvent.h"
#include "Events/DisconnectedEvent.h"
#include <atomic>
#include <Client.hpp>
struct ImguiService;
struct UpdateEvent;
struct ClientMessage;
struct AuthenticationResponse;
struct NotifySettingsChange;
struct World;
using TiltedPhoques::Client;
/**
* @brief Handles communication with the server.
*/
struct TransportService : Client
{
TransportService(World& aWorld, entt::dispatcher& aDispatcher) noexcept;
~TransportService() noexcept = default;
TP_NOCOPYMOVE(TransportService);
bool Send(const ClientMessage& acMessage) const noexcept;
void OnConsume(const void* apData, uint32_t aSize) override;
void OnConnected() override;
void OnDisconnected(EDisconnectReason aReason) override;
void OnUpdate() override;
[[nodiscard]] bool IsOnline() const noexcept { return m_connected; }
void SetServerPassword(const std::string& acPassword) noexcept { m_serverPassword = acPassword; }
const uint32_t& GetLocalPlayerId() const noexcept { return m_localPlayerId; }
protected:
// Event handlers
void HandleUpdate(const UpdateEvent& acEvent) noexcept;
void HandleConnected(const ConnectedEvent& acEvent) noexcept;
void HandleDisconnected(const DisconnectedEvent& acEvent) noexcept;
// Packet handlers
void HandleAuthenticationResponse(const AuthenticationResponse& acMessage) noexcept;
void HandleNotifySettingsChange(const NotifySettingsChange& acMessage) noexcept;
private:
World& m_world;
entt::dispatcher& m_dispatcher;
bool m_connected;
String m_serverPassword{};
uint32_t m_localPlayerId;
entt::scoped_connection m_updateConnection;
entt::scoped_connection m_sendServerMessageConnection;
entt::scoped_connection m_settingsChangeConnection;
entt::scoped_connection m_connectedConnection;
entt::scoped_connection m_disconnectedConnection;
std::function<void(UniquePtr<ServerMessage>&)> m_messageHandlers[kServerOpcodeMax];
};