многопоточность — класс статического наблюдателя c ++

У меня есть две программы: сервер и клиент

class client
{
private:
Network    net;
Gui        gui;
};

Вот класс сети

class Network
{
public:
void      receivePacket(packet)
{
Protocol::readPacket(packet)
}
};

Вот класс Gui

class Gui
{
private:
std::string   informations;

public:
void          displayInfo();
void          updateInformation(information);
};

А вот протокол

class Protocol
{
static void     readPacket(packet)
{
if (packet.command == "refreshGui")
//I need somehow to call GUI::UpdateInformation here and give the information from packet.information
}
};

Протокол рассматривается как «статический класс», что означает, что его нельзя создавать. Так что идея в том, что когда Protocol::readPacket получить packet с сервера, он должен иметь возможность отправлять информацию GUI, Однако, это не всегда так, поэтому передача точки / ссылки — это не то, что я ищу.

Это не очень хорошо проиллюстрировано, но идея такова:
Protocol::readPacket искать, если нам нужно позвонить GUI
— Протокол не должен принимать другой аргумент и не должен быть создан.

Кто-то дал мне совет по использованию шаблона Observer. Protocol будет предметом и GUI Наблюдатель. Однако я не смог бы сделать это без создания протокола.

Так есть ли способ сделать это без создания экземпляра протокола?

0

Решение

В распределенных вычислениях сетевой менеджер узла обычно принимает сообщение и вызывает диспетчер, связанный с типом сообщения. Ваша потребность очень похожа. Вот что вы могли бы сделать:

  • В своем классе Network ведите unordered_map< тип_пакета, std :: function>.
  • Когда ваша программа запустится, вставьте в это unordered_map std :: pair<«refreshGui», Gui :: UpdateInformation>
  • В Network :: receivePacket извлеките функцию из unordered_map и вызовите ее.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]