1
0

muduo_echo.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // @see muduo/examples/simple/echo
  2. #include "muduo/base/Logging.h"
  3. #include "muduo/net/EventLoop.h"
  4. #include "muduo/net/InetAddress.h"
  5. #include "muduo/net/TcpServer.h"
  6. using std::placeholders::_1;
  7. using std::placeholders::_2;
  8. using std::placeholders::_3;
  9. using muduo::Timestamp;
  10. using muduo::net::EventLoop;
  11. using muduo::net::InetAddress;
  12. using muduo::net::TcpServer;
  13. using muduo::net::TcpConnectionPtr;
  14. using muduo::net::Buffer;
  15. class EchoTcpServer {
  16. public:
  17. EchoTcpServer(EventLoop* loop, const InetAddress& addr)
  18. : server_(loop, addr, "EchoTcpServer")
  19. {
  20. server_.setConnectionCallback(std::bind(&EchoTcpServer::onConnection, this, _1));
  21. server_.setMessageCallback(std::bind(&EchoTcpServer::onMessage, this, _1, _2, _3));
  22. }
  23. void start() {
  24. server_.start();
  25. }
  26. private:
  27. void onConnection(const TcpConnectionPtr& conn) {
  28. }
  29. void onMessage(const TcpConnectionPtr& conn,
  30. Buffer* buf, Timestamp time) {
  31. muduo::string msg(buf->retrieveAllAsString());
  32. conn->send(msg);
  33. }
  34. TcpServer server_;
  35. };
  36. int main(int argc, char** argv) {
  37. if (argc < 2) {
  38. printf("Usage: cmd port\n");
  39. return -10;
  40. }
  41. int port = atoi(argv[1]);
  42. muduo::g_logLevel = muduo::Logger::ERROR;
  43. muduo::net::EventLoop loop;
  44. muduo::net::InetAddress addr(port);
  45. EchoTcpServer server(&loop, addr);
  46. server.start();
  47. loop.loop();
  48. return 0;
  49. }