BOOST ASIO - Cómo escribir un servidor de consola

Tengo que escribir un servidor TCP asíncrono. El servidor TCP debe ser administrado por la consola (por ejemplo: eliminar cliente, mostrar lista de todos los clientes conectados, etc.)

El problema es: ¿Cómo puedo adjuntar (o escribir) la consola, que puede llamar a las funcionalidades anteriores. Esta consola tiene que ser un cliente? ¿Debo ejecutar este cliente de consola como un hilo separado?

He leído muchos tutoriales y no pude encontrar una solución a mi problema.

ServerTCP code

class ServerTCP
{
public:
   ServerTCP(boost::asio::io_service& A_ioService, unsigned short A_uPortNumber = 13)
      : m_tcpAcceptor(A_ioService, tcp::endpoint(tcp::v4(), A_uPortNumber)), m_ioService (A_ioService)
   {
      start();
   }
private:

   void start()
   {
      ClientSessionPtr spClient(new ClientSession(m_tcpAcceptor.io_service(), m_connectedClients));

      m_tcpAcceptor.async_accept(spClient->getSocket(), 
                                 boost::bind(&ServerTCP::handleAccept, this, spClient, 
                                 boost::asio::placeholders::error));

   }
   void handleAccept(ClientSessionPtr A_spNewClient,  const boost::system::error_code& A_nError)
   {
      if ( !A_nError )
      {
         A_spNewClient->start();
         start();
      }
   }



   boost::asio::io_service& m_ioService;
   tcp::acceptor            m_tcpAcceptor;
   Clients                  m_connectedClients;
};

Función principal

   try
   {
      boost::asio::io_service ioService;

      ServerTCP server(ioService);
      ioService.run();  
   }
   catch (std::exception& e)
   {
      std::cerr << "Exception: " << e.what() << "\n";
   }

Hola Sam. Gracias por responder. ¿Podría ser tan amable y mostrarme algún código o algunos enlaces a ejemplos relacionados con este problema? Probablemente, no entiendo correctamente "... servidor de un solo subproceso ..."

e hecho, en "consola" donde deseo administrar las operaciones del servidor, necesito smt como a continuación:

main()

cout << "Options: q - close server, s - show clients";
while(1)
{
  char key = _getch();
  switch( key )
  {
      case 'q':
         closeServer();
      break
      case 's':
         showClients();
      break
  } 
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta