本节处理消息的接收。消息的接收是被动事件,易于处理。
首先讲解用户的消息处理函数注册过程。
用户需要自己注册自己的消息接收处理函数。例如下面这样的消息回调函数。
void onMessage(const muduo::TcpConnectionPtr& conn,
muduo::Buffer* buf,
muduo::Timestamp receiveTime)
{
printf("onMessage(): tid=%d received %zd bytes from connection [%s] at %s\n",
muduo::CurrentThread::tid(),
buf->readableBytes(),
conn->name().c_str(),
receiveTime.toFormattedString().c_str());
buf->retrieveAll();
}
接着需要在TcpServer上注册函数,例如下面这样的写法。
muduo::TcpServer server(&loop, listenAddr);
server.setMessageCallback(onMessage);
那么我们注册消息接收回调函数是被注册到哪里了呢?
首先这个回调函数设置为了TcpServer的一个数据成员。
void setMessageCallback(const MessageCallback& cb)
{ messageCallback_ = cb; }