отправить функцию как сообщение в omnet

Я использую Veins 4a2 в omnet ++ 4.6. Я хотел бы отправить информацию, содержащуюся в функции, в виде сообщения соседним узлам. Как этого добиться? функция в .cc выглядит так:

void TraCITestApp::append2List(short carId, short firstEmptyArrayIndex,     simtime_t messageTime, double theta, std::string vType) {
listedVehicles[firstEmptyArrayIndex].id = carId; // ~~here the Id is changed name to car ID.
listedVehicles[firstEmptyArrayIndex].lastSeenAt = messageTime;
listedVehicles[firstEmptyArrayIndex].vType = vType;
listedVehicles[firstEmptyArrayIndex].theta = theta;
EV << "Appending car with id " << carId <<" type "<< vType << " to the list of known vehicle." << endl;



/* @brief Increase related counting variable
* The total number always increased for each vehicle
*/
currentNumberofTotalDetectedVehicles++;
}

.

void TraCITestApp::showInfo_D(short counter){
EV << "Listed Table for Truthtelling:" << endl;
   for (int i = 0; i < counter; i++)
 { EV << "Serial [" << i << "] " <<"ID="<< listedVehicles[i].id <<  "\tTruthtelling prob.\t" << listedVehicles[i].theta <<endl;

std::ofstream tracefile;
   tracefile.open("traceFiledata.txt", std::ios_base::app);
   tracefile << "============================================";
   tracefile << "MyID=" << getMyID() << ";" <<"Serial [" << i << "] " <<"ID="<< listedVehicles[i].id <<  ";" << "Time=" << simTime() << ";" << "TTP=" << listedVehicles[i].theta << getMetaData() << std::endl;
   tracefile.close();

}

EV << "Total number of detected vehicle\t: " << currentNumberofTotalDetectedVehicles << endl;

}

Я могу вызвать метод в void TraCITestApp::onData(WaveShortMessage* wsm) как showInfo_D(currentNumberofVehicles);

Но как я могу отправить эту информацию другим соседним автомобилям? Я хочу отправлять и накапливать информацию по каждому транспортному средству, но только начальную информацию, т.е. я не отправляю всю накопленную информацию.


person Zecar    schedule 03.03.2016    source источник
comment
какую конкретную информацию вы хотите отправить? какие переменные содержат эту информацию? Почему void TraCITestApp::append2List() функция вообще включена в этот вопрос?   -  person user4786271    schedule 03.03.2016
comment
Я хочу отправить перечисленныеVehicles [i] .id, значение тета и время моделирования вместе с сообщением WSM, если это возможно. Я добавил append2List, поскольку он связан с методом showInfo_D (). Можно ли отправить это сообщение так же, как накопленное на стороне получателя?   -  person Zecar    schedule 03.03.2016


Ответы (1)


Вы можете расширить WSM, чтобы он содержал информацию, которой вы хотите обмениваться. Вот пример расширения WSM и создания сообщения для ваших собственных целей.

Просто объявите переменные внутри определения сообщения, в котором будут храниться ваши данные.

cplusplus {{
#include "veins/modules/messages/WaveShortMessage_m.h"
}}

class WaveShortMessage;

message MyAppsPacket extends WaveShortMessage {
    string sourceAddress;           
    string destinationAddress;      
    simtime_t sendingTime;
    string vehicleID;
    whateverType theta;
}

Затем при генерации MyAppsPacket вы можете:

MyAppsPacket->setTheta(theta);
MyAppsPacket->setSendingTime(simeTime());
MyAppsPacket->setVehicleID(listedVehicles[i].id;

К сожалению, я не могу дать вам готовое к использованию решение, так как я не знаю подробностей вашего кода, но это должно дать вам общее представление о том, что вам следует делать.

person user4786271    schedule 04.03.2016
comment
Привет, я пытаюсь использовать структуру в waveshortmessage.msg как: cplusplus {{#include veins / base / utils / Coord.h // Добавлена ​​структура struct knownVehicle1 {int ids; двойной theta1; simtime_t lastSeenAt; }; }} класс noncobject Coord; class noncobject knownVehicle1; пакет WaveShortMessage {..... knownVehicle1 knownVeh; // добавлено ..} как отправить структуру и получить в .cc, чтобы я мог хранить и собирать все тета-значения ... - person Zecar; 05.03.2016
comment
Кроме того, я пробовал ваш метод, но где я должен сгенерировать MyAppsPacket, отправить его и получить это (может быть метод receive @ onData ()). Мне нужно отправить таблицу с идентификатором и значением тета, а также собрать эти значения со всех соседних узлов после аварии. - person Zecar; 05.03.2016
comment
Я хотел отправить структуру как: void attack1 :: sendMessage1 (double theta1) {t_channel channel = dataOnSch? type_SCH: type_CCH; EWaveShortMessage * wsm = prepareWSM (данные, dataLengthBits, канал, dataPriority, -1,2); knownVehicle1 * veh = новый knownVehicle1 (); veh- ›theta1 = 0,58; wsm- ›setKnownVeh (* veh); sendWSM (WSM); } и OnData: метод я использовал sendMessage1 (wsm- ›getKnownVeh (). theta1); Но я столкнулся с такими ошибками: ошибка: нет соответствующей функции для вызова 'EWaveShortMessage :: setKnownVeh (knownVehicle1 &)' wsm- ›setKnownVeh (* veh); - person Zecar; 06.03.2016