| | |
| | | |
| | | using namespace std::chrono_literals; |
| | | |
| | | TcpServer::TcpServer(int port, CenterPtr pscenter) : |
| | | listener_(io(), tcp::endpoint(tcp::v6(), port)), pscenter_(pscenter) |
| | | { |
| | | Accept(); |
| | | } |
| | | |
| | | TcpServer::~TcpServer() { Stop(); } |
| | | |
| | | void TcpServer::OnStop() |
| | | { |
| | | listener_.close(); |
| | | } |
| | | |
| | | void TcpServer::Accept() |
| | | { |
| | | listener_.async_accept([this](bserror_t ec, tcp::socket sock) { |
| | | if (!ec) { |
| | | LOG_INFO() << "server accept client"; |
| | | LOG_TRACE() << "server accept client"; |
| | | TcpReply1::Create(std::move(sock), pscenter_); |
| | | Accept(); |
| | | } else { |
| | | // this is already destructed by now. |
| | | if (ec.value() != ECANCELED) { |
| | | LOG_WARNING() << "tcp server accept error: " << ec; |
| | | Accept(); |
| | | } |
| | | } |
| | | Accept(); |
| | | }); |
| | | } |