#pragma once #include #include #include namespace td { namespace server { class IServerSocket { public: using PlayerPacketHandlerType = std::unique_ptr(PlayerID); using PlayerPacketHandler = std::function; utils::Signal OnPlayerJoin; utils::Signal OnPlayerLeave; utils::Signal OnReceive; void Send(PlayerID a_PlayerId, const protocol::PacketBase& a_Packet); void Broadcast(const protocol::PacketBase& a_Packet); void Disconnect(PlayerID a_PlayerId); void RegisterHandler(const PlayerPacketHandler& a_Handler); void UnregisterHandler(const PlayerPacketHandler& a_Handler); IServerSocket(); virtual ~IServerSocket() {} private: PlayerIds m_Ids; std::vector m_Handlers; protected: void OnConnectPeer(PeerID a_PeerId); void OnDisconnectPeer(PeerID a_PeerId); void OnReceivePeer(PeerID a_PeerId, const protocol::PacketBase& a_Packet); virtual void SendPeer(PeerID a_PeerId, const protocol::PacketBase& a_Packet) = 0; }; } // namespace server } // namespace td