#pragma once #include "MinecraftClient.h" #include "ServerStatus.h" #include "protocol/Protocol.h" #include "network/IListenerInterface.h" namespace Feather { class ServerProperties; class DedicatedServer final : public Network::IListenerInterface { public: DedicatedServer(ServerProperties* properties); ~DedicatedServer(); void OnClientConnect(Network::TCPClientHandle&& client) override; void OnClientDisconnect(const Network::TCPClient* client) override; void HandleLegacyPing(MinecraftClient& client); template void HandlePacket(MinecraftClient& client, const T& message); private: ServerProperties* m_properties; Network::TCPListener m_listener; ServerStatus m_status; LockableList m_clients; }; }