#pragma once #include "MinecraftClient.h" #include "ServerStatus.h" #include "protocol/Protocol.h" #include "PacketReader.h" #include "JobManager.h" #include "world/WorldManager.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); void HandleUnknownPacket(MinecraftClient& client, int32_t id, const PacketReader& packet); private: ServerProperties* m_properties; Network::TCPListener m_listener; ServerStatus m_status; LockableList m_clients; WorldManager m_worldManager; JobRunner m_jobRunner; }; }