void Listener<SocketType>::OnAccept(NetworkThread<SocketType> *worker, std::shared_ptr<SocketType> const& socket, const boost::system::error_code &ec) { // an error has occurred if (ec) worker->RemoveSocket(socket.get()); else socket->Open(); BeginAccept(); }
Listener<SocketType>::Listener(std::string const& address, int port, int workerThreads) : m_service(new boost::asio::io_service()), m_acceptor(new boost::asio::ip::tcp::acceptor(*m_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::address::from_string(address), port))) { m_workerThreads.reserve(workerThreads); for (auto i = 0; i < workerThreads; ++i) m_workerThreads.push_back(std::unique_ptr<NetworkThread<SocketType>>(new NetworkThread<SocketType>)); BeginAccept(); m_acceptorThread = std::thread([this]() { this->m_service->run(); }); }
Listener<SocketType>::Listener(int port, int workerThreads) : m_acceptor(m_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port)) { m_workerThreads.reserve(workerThreads); for (int i = 0; i < workerThreads; ++i) m_workerThreads.push_back(std::unique_ptr<NetworkThread<SocketType>>(new NetworkThread<SocketType>)); BeginAccept(); m_acceptorThread = std::thread([this]() { this->m_service.run(); }); }
SocketPtr Socket::Accept() { return EndAccept(BeginAccept()); }