1 2 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(); }
|