#pragma once #include #include #include #include #include #include namespace std::net { class TcpConnection; class Server; class TcpListener; } namespace std::net { class TcpConnectionHandler { friend class Server; public: TcpConnectionHandler(shared_ptr listener_ptr); ~TcpConnectionHandler(); void Start(); void Stop(); void AddClient(shared_ptr &c); void SetMaxConnections(uint32_t max_connections); void HandlePluginMessage(const NetworkMessage& message); uint32_t GetAvailableID(); private: void HandleConnections(); void HandleMessage(const NetworkMessage &msg); void HandleConnectionsThreaded(); private: vector> m_list; mutex m_listMutex; uint32_t m_maxConnections = 0; thread m_receiveThread; atomic_bool m_run; shared_ptr m_listenerPtr; shared_ptr m_pluginManager; vector m_pollFds; ServerConfig m_config; }; }