Итак, у меня есть эти два класса, mpqs_client и client_protocol. Класс mpqs_client обрабатывает подключение сокета Boost к серверу (отправляя и получая сообщения в определенном формате. При получении сообщения он вызывает статический метод parse_message (..) в классе client_protocol, и этот метод должен анализировать сообщение Получите и выполните соответствующее действие.
Учитывая некоторые специфические данные, метод parse_message должен отправить некоторые данные обратно на сервер. Как уже упоминалось, это происходит через класс mpqs_client. Таким образом, я мог бы из mpqs_client передать this в parse_message (..) в client_protocol. Однако это приводит к двусторонней связи между двумя классами. То, что я считаю, нежелательно. Кроме того, чтобы реализовать это, мне нужно было бы включить другого в каждый из них, и это доставляет мне ужасную боль.
Я думаю, что это больше проблема дизайна. Какое лучшее решение здесь?
Код размещен ниже.
Класс 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;
}
}