| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 
 | #include <muduo/net/TcpServer.h>#include <muduo/base/Logging.h>
 #include <muduo/net/EventLoop.h>
 #include "string"
 #include "functional"
 
 
 class EchoServer {
 public:
 EchoServer(muduo::net::EventLoop *loop,
 const muduo::net::InetAddress &listenAddr,
 const muduo::string &nameArg) : server_(loop, listenAddr, nameArg), loop_(loop) {
 
 server_.setConnectionCallback(
 bind(&EchoServer::onConnection, this, muduo::_1));
 
 server_.setMessageCallback(
 bind(&EchoServer::onMessage, this, muduo::_1, muduo::_2, muduo::_3));
 
 server_.setThreadNum(4);
 }
 
 void start(){
 server_.start();
 };
 
 private:
 void onConnection(const muduo::net::TcpConnectionPtr& conn);
 
 void onMessage(const muduo::net::TcpConnectionPtr& conn,
 muduo::net::Buffer* buf,
 muduo::Timestamp time);
 muduo::net::TcpServer server_;
 muduo::net::EventLoop *loop_;
 };
 
 void EchoServer::onConnection(const muduo::net::TcpConnectionPtr& conn)
 {
 LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
 << conn->localAddress().toIpPort() << " is "
 << (conn->connected() ? "UP" : "DOWN");
 }
 
 void EchoServer::onMessage(const muduo::net::TcpConnectionPtr& conn,
 muduo::net::Buffer* buf,
 muduo::Timestamp time)
 {
 
 muduo::string msg(buf->retrieveAllAsString());
 LOG_INFO << conn->name() << " echo " << msg.size() << " bytes, "
 << "data received at " << time.toString();
 conn->send(msg);
 }
 
 int main() {
 LOG_INFO << "pid = " << getpid();
 muduo::net::EventLoop loop;
 muduo::net::InetAddress listenAddr("127.0.0.1",6000);
 EchoServer server(&loop, listenAddr,"test");
 server.start();
 loop.loop();
 }
 
 |