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