#pragma once #include #include #include #include #include #include #include #include #include #include "Common/Constant.hpp" #include "Common/ByteStream.hpp" #include "../Network/RealmSocket.hpp" class LobbyServer { private: std::atomic< bool > m_running; std::thread m_thread; public: static LobbyServer& Get() { static LobbyServer instance; return instance; } LobbyServer( const LobbyServer & ) = delete; LobbyServer &operator=( const LobbyServer & ) = delete; LobbyServer(); ~LobbyServer(); void Start( std::string ip ); void Stop(); bool isRunning() const { return m_running; } private: sptr_socket m_conSocket; sptr_socket m_rtaSocket; std::vector< sptr_socket > m_gatewaySockets; std::vector< sptr_socket > m_clientSockets; std::vector< uint8_t > m_recvBuffer; sptr_socket OpenListenerSocket( std::string ip, int32_t port, RealmGameType type ); void Run(); void CheckSocketProblem(); void AcceptConnection( sptr_socket srcSocket ); void ReadSocket( sptr_socket socket ); void WriteSocket( sptr_socket socket ); void HandleRequest( sptr_socket socket, sptr_byte_stream stream ); };