1#include "TcpServer.h"
2#include "EventLoop.h"
3#include "InetAddress.h"
4#include <stdio.h>
5
6std::string message;
7
8void onConnection(const muduo::TcpConnectionPtr& conn)
9{
10  if (conn->connected())
11  {
12    printf("onConnection(): tid=%d new connection [%s] from %s\n",
13           muduo::CurrentThread::tid(),
14           conn->name().c_str(),
15           conn->peerAddress().toHostPort().c_str());
16    conn->send(message);
17  }
18  else
19  {
20    printf("onConnection(): tid=%d connection [%s] is down\n",
21           muduo::CurrentThread::tid(),
22           conn->name().c_str());
23  }
24}
25
26void onWriteComplete(const muduo::TcpConnectionPtr& conn)
27{
28  conn->send(message);
29}
30
31void onMessage(const muduo::TcpConnectionPtr& conn,
32               muduo::Buffer* buf,
33               muduo::Timestamp receiveTime)
34{
35  printf("onMessage(): tid=%d received %zd bytes from connection [%s] at %s\n",
36         muduo::CurrentThread::tid(),
37         buf->readableBytes(),
38         conn->name().c_str(),
39         receiveTime.toFormattedString().c_str());
40
41  buf->retrieveAll();
42}
43
44int main(int argc, char* argv[])
45{
46  printf("main(): pid = %d\n", getpid());
47
48  std::string line;
49  for (int i = 33; i < 127; ++i)
50  {
51    line.push_back(char(i));
52  }
53  line += line;
54
55  for (size_t i = 0; i < 127-33; ++i)
56  {
57    message += line.substr(i, 72) + '\n';
58  }
59
60  muduo::InetAddress listenAddr(9981);
61  muduo::EventLoop loop;
62
63  muduo::TcpServer server(&loop, listenAddr);
64  server.setConnectionCallback(onConnection);
65  server.setMessageCallback(onMessage);
66  server.setWriteCompleteCallback(onWriteComplete);
67  if (argc > 1) {
68    server.setThreadNum(atoi(argv[1]));
69  }
70  server.start();
71
72  loop.loop();
73}
74