Advertisement
Guest User

Untitled

a guest
Apr 9th, 2020
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 KB | None | 0 0
  1. #include "echo.hpp"
  2.  
  3. namespace echo {
  4.  
  5. EchoServer::EchoServer(uint16_t port) {
  6.   auto status = acceptor_.Listen(port);
  7. }
  8.  
  9. void EchoServer::ServeForever() {
  10.   while (true) {
  11.     tinyfiber::Result<tinyfiber::tcp::Socket> accepted = acceptor_.Accept();
  12.     if (accepted.Error()) {
  13.       std::cout << accepted.Error().message() << "\n";
  14.       return;
  15.     }
  16.  
  17.     std::shared_ptr<tinyfiber::tcp::Socket> echo_connection = std::make_shared<tinyfiber::tcp::Socket>(std::move(accepted.Value()));
  18.  
  19.     tinyfiber::Spawn([echo_connection = echo_connection]() {
  20.       const size_t  kBufSize = 1024;
  21.       char buf[kBufSize];
  22.  
  23.       while (true) {
  24.         auto read = echo_connection->ReadSome(asio::buffer(buf, kBufSize));
  25.  
  26.         if (!read.IsOk()) {
  27.           if (!read.MatchErrorCode(asio::error::eof)) {
  28.             std::cout << read.Error().message() << "\n";
  29.           }
  30.           break;
  31.         }
  32.  
  33.         if (read.Value() == 0) {
  34.           break;
  35.         }
  36.  
  37.         auto write = echo_connection->Write(asio::buffer(buf, read.Value()));
  38.  
  39.         if (!write.IsOk()) {
  40.           std::cout << write.Error().message() << "\n";
  41.           break;
  42.         }
  43.       }
  44.       echo_connection->ShutdownWrite();
  45.     });
  46.   }
  47. }
  48.  
  49. }  // namespace echo
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement