Boost Asio:chat_message.hpp如何在聊天服务器示例中运行?

时间:2016-05-13 08:36:34

标签: c++ boost boost-asio handler accessor

在库的Chat示例中,我看到有一个“chat_message”标题声明了一个类。在那个课程中,我可以看到以下功能 - 其他功能 - :

const char* body() const
  {
    return data_ + header_length;
  }

  char* body()
  {
    return data_ + header_length;
  }

  std::size_t body_length() const
  {
    return body_length_;
  }

我这里只看到访问者,没有变异者。但是,在“chat_session”类中,即使没有任何mutator,处理程序也会使用此类。但是,我猜想“chat_message”的成员变量会以某种方式被修改。从“chat_session”中看到这段代码:

  void handle_read_header(const boost::system::error_code& error)
  {
    if (!error && read_msg_.decode_header())
    {
      boost::asio::async_read(socket_,
          boost::asio::buffer(read_msg_.body(), read_msg_.body_length()),
          boost::bind(&chat_session::handle_read_body, shared_from_this(),
            boost::asio::placeholders::error));
    }
    else
    {
      room_.leave(shared_from_this());
    }
  }

  void handle_read_body(const boost::system::error_code& error)
  {
    if (!error)
    {
      room_.deliver(read_msg_);
      boost::asio::async_read(socket_,
          boost::asio::buffer(read_msg_.data(), chat_message::header_length),
          boost::bind(&chat_session::handle_read_header, shared_from_this(),
            boost::asio::placeholders::error));
    }
    else
    {
      room_.leave(shared_from_this());
    }
  }

我想在“async_read”中,收到的数据以某种方式传递给对象,但我不明白如何。

你能解释一下数据是如何从“async_read”传递到对象的吗?

非常感谢你。

0 个答案:

没有答案