为tcp处理程序对象提供上下文

时间:2017-01-20 15:06:58

标签: c++ oop networking tcp

我在一个小的tcp服务器应用程序上编程练习,我遇到了一个问题:

我有一个tcp_server对象,它以tcp_abstract_handler对象作为参数。 现在我可以从tcp_abstract_handler派生并处理传入的事件。 问题是my_handler与其他人隔离开来。 我创建了一个小"上下文" struct to" connect"它需要的对象的处理程序。但这似乎相当难看。是否有模式或常见方法来解决这个问题?

 struct my_server_context_t
 {
    unsigned int& num_connections; //just as example
 };

 class my_handler : public tcp_abstract_handler
 {
    public:
      my_handler(const my_server_context_t& ctx) 
        : ctx(ctx)
      {
      } 

      ... 


      void socket_connected_event(const socket_event_args& args)
      {
        ctx.num_connections++; 
      }

      void socket_disconnected_event(const socket_event_args& args)
      {
       ctx.num_connections--;
      }

    private:
      my_server_context_t ctx;
 };

 class my_server
 {
 public: 
   void run()
   {
     my_server_context_t ctx = { num_connections };
     tcp_server srv(listen_port, new my_handler(ctx));
     srv.run();
   }

 private:
   unsigned int num_connections;
 };

0 个答案:

没有答案