lichao
2021-05-27 026bbfaf2b5d73a26b8e2fa49158883ef64c211b
box/tcp_server.cpp
@@ -23,39 +23,17 @@
using namespace std::chrono_literals;
TcpServer::TcpServer(int port) :
    run_(false), listener_(io_, tcp::endpoint(tcp::v6(), port))
TcpServer::TcpServer(int port, CenterPtr pscenter) :
    listener_(io(), tcp::endpoint(tcp::v6(), port)), pscenter_(pscenter)
{
   Accept();
}
TcpServer::~TcpServer() { Stop(); }
bool TcpServer::Start()
void TcpServer::OnStop()
{
   Stop();
   bool cur = false;
   if (run_.compare_exchange_strong(cur, true)) {
      auto proc = [this]() {
         while (run_) {
            io_.run_one_for(100ms);
         }
      };
      std::thread(proc).swap(worker_);
   }
}
void TcpServer::Stop()
{
   bool cur = true;
   if (run_.compare_exchange_strong(cur, false)) {
      io_.post([this]() {
         listener_.close();
      });
      std::this_thread::sleep_for(1s);
      if (worker_.joinable()) {
         worker_.join();
      }
   }
   listener_.close();
}
void TcpServer::Accept()
@@ -63,7 +41,7 @@
   listener_.async_accept([this](bserror_t ec, tcp::socket sock) {
      if (!ec) {
         LOG_INFO() << "server accept client";
         TcpReply1::Create(std::move(sock));
         TcpReply1::Create(std::move(sock), pscenter_);
      }
      Accept();
   });