#pragma once #include "proxy_client.h" class ProxyManager { public: ProxyManager() : m_io(), m_guard(boost::asio::make_work_guard(m_io)) { } void init(); void terminate(); void clear(); void setMaxActiveProxies(int value) { m_maxActiveProxies = value; if (m_maxActiveProxies < 1) m_maxActiveProxies = 1; } bool isActive(); void addProxy(const std::string& host, uint16_t port, int priority); void removeProxy(const std::string& host, uint16_t port); uint32_t addSession(uint16_t port, std::function recvCallback, std::function disconnectCallback); void removeSession(uint32_t sessionId); void send(uint32_t sessionId, ProxyPacketPtr packet); // tools std::map getProxies(); std::map getProxiesDebugInfo(); int getPing(); private: boost::asio::io_context m_io; boost::asio::executor_work_guard m_guard; bool m_working = false; std::thread m_thread; int m_maxActiveProxies = 2; std::list> m_proxies; std::list> m_sessions; }; extern ProxyManager g_proxy;