C++套接字协议设计问题(环包含)
我有两个类,mpqs_客户端和客户端协议。mpqs_客户端类处理到服务器的Boost套接字连接,该服务器发送和接收具有特定格式的消息。在接收到消息后,它调用类client_协议中的静态方法parse_message..,该方法应该分析接收到的消息并执行一些相应的操作 给定一些特定的输入,parse_消息方法需要将一些数据发送回服务器。如前所述,这是通过类mpqs_客户端实现的。所以我可以,从mpqs_客户端,把这个传递给parse_消息。。在客户端协议中。然而,这导致了两个类之间的双向关联关系。我认为不可取的东西。而且,为了实现这一点,我需要在每一项中包含另一项,这给了我极大的痛苦 我认为这更多的是一个设计问题。这里最好的解决方案是什么 代码发布在下面 mpqs_类客户端:C++套接字协议设计问题(环包含),c++,include,boost-asio,C++,Include,Boost Asio,我有两个类,mpqs_客户端和客户端协议。mpqs_客户端类处理到服务器的Boost套接字连接,该服务器发送和接收具有特定格式的消息。在接收到消息后,它调用类client_协议中的静态方法parse_message..,该方法应该分析接收到的消息并执行一些相应的操作 给定一些特定的输入,parse_消息方法需要将一些数据发送回服务器。如前所述,这是通过类mpqs_客户端实现的。所以我可以,从mpqs_客户端,把这个传递给parse_消息。。在客户端协议中。然而,这导致了两个类之间的双向关联关系。
#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));
}
类客户端协议:
#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;
}
}
在C++中为MPQSB客户机提取一个接口抽象基础调用,并将其实例传递到clitNI协议中——实例实际上是真正的MPQSB客户端对象,但是接口避免了双向依赖性。然后使用指向它的指针。。