C ++套接字协议设计问题(环包含)

时间:2010-05-02 19:00:52

标签: c++ include boost-asio

所以我有这两个类,mpqs_client和client_protocol。 mpqs_client类处理到服务器的Boost套接字连接(发送和接收具有某种特定格式的消息。收到消息后,它在类client_protocol中调用静态方法parse_message(..),此方法应分析消息收到并执行了相应的操作。

给定一些特定输入,parse_message方法需要将一些数据发送回服务器。如上所述,这通过类mpqs_client发生。所以我可以从mpqs_client中将“this”传递给client_protocol中的parse_message(..)。但是,这会导致两个类之间的双向关联关系。我估计的东西是不可取的。另外,要实现这一点,我需要在每一个中包含另一个,这给我带来了可怕的痛苦。

我认为这更像是一个设计问题。这里最好的解决方案是什么?

代码发布在下面。

类mpqs_client:

#include "mpqs_client.h"

mpqs_client::mpqs_client(boost::asio::io_service& io_service, tcp::resolver::iterator endpoint_iterator) : io_service_(io_service), socket_(io_service) {
    ...
}
...
void mpqs_client::write(const network_message& msg) {
    io_service_.post(boost::bind(&mpqs_client::do_write, this, msg));
}

类client_protocol:

#include "../network_message.hpp"
#include "../protocol_consts.h"

class client_protocol {
public:
    static void parse_message(network_message& msg, mpqs_sieve **instance_, mpqs_client &client_) { 
        ...                 
        switch (type) {         
            case MPQS_DATA: 
                ...         
                break;
            case POLYNOMIAL_DATA:
                ...
                break;
            default:
                break;
        }
    }

1 个答案:

答案 0 :(得分:0)

为mpqs_client提取一个接口(C ++中的抽象基本调用),并将其实例传递给client_protocol - 该实例实际上是真正的mpqs_client对象,但该接口避免了双向依赖。