Как добавить параметры в пакет и получить их? - PullRequest
0 голосов
/ 15 января 2020

Итак, я успешно справился с предыдущими проблемами с пакетами. Однако теперь я хочу добавить параметры в мой пакет и получить их. Сейчас мой код

Packet *pk = new Packet(msgName);
const auto& payload = makeShared<ApplicationPacket>();
payload -> setChunkLength(B(msgByteLength));
pk -> insertAtBack(payload);
pk->addPar("testpara") = "a";

Получение пакета:

void Receiver::processPacket(Packet *pk)
{
    char a = pk->par("testpara");
    EV_INFO << a << endl;
}

Я получаю сообщение об ошибке

Нет параметра с именем 'testpara'

Есть ли правильный путь к этому?

1 Ответ

1 голос
/ 22 января 2020

То, что вы делаете, не правильно. Добавление параметра в пакет добавит только объект параметра, но этот параметр и все теги и другие метаинфо будут удалены из пакета, как только он будет размещен в сети. Будут переданы только данные, которые на самом деле находятся внутри определения пакета (то есть то, что сериализовано и размещено на физическом носителе).

Надлежащим способом является добавление ваших данных в определение ApplicationPacket.msg, а затем вы будете быть в состоянии установить их непосредственно на payload. (компилятор сообщений сгенерирует необходимые методы установки / получения).

Кстати, ApplicationPacket , который вы используете, является просто примером в INET, который содержит sequenceNumber в качестве данных. Но вы можете определить свою собственную структуру полезной нагрузки, просто расширьте класс FieldsChunk в файле .msg и используйте его в качестве полезной нагрузки в коде вашего приложения.

TLDR: Параметры никогда не должны использоваться в INET на пакетах. Теги следует использовать только для межуровневой связи внутри одного хоста. Данные, предназначенные для передачи, всегда должны быть определены в файлах .msg.

...