我在一个小的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;
};