Как использовать время симуляции для запуска действий в модулях? - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу создать симуляцию с сервером и 2 узлами.Узлы определили вектор, который содержит время для включения / выключения (пример timersOnOff = 5,10,13,25… nod включится через 5 секунд после начала симуляции, а затем будет отключен через 10 секунд и т. Д.).Как вызвать действие в определенное время, чтобы отправить сообщение на узел для «включения» или «выключения».?

1 Ответ

0 голосов
/ 14 сентября 2018

Предположим, что эти времена записаны в timersOnOff, объявленном как:

std::vector<simtime_t> timersOnOff;

В initialize() добавить следующий код:

for (int i = 0; i < timersOnOff.size(); i = i + 2) {
   simtime_t timeOn = timersOnOff[i];
   simtime_t timeOff = timersOnOff[i+1];
   cMessage * msgOn = new cMessage("nodeOn");     // (1)
   cMessage * msgOff = new cMessage("nodeOff");   // (2)
   scheduleAt (timeOn, msgOn);
   scheduleAt (timeOff, msgOff);
}

Приведенный выше код планирует все события ВКЛ и ВЫКЛ.

Затем в handleMessage() добавить:

if (msg->isSelfMessage()) {
   if (msg->isName("nodeOn")) {  // the same name as in (1)
      delete msg;
      // turning on the node

   } else if (msg->isName("nodeOff")) { // the same name as in (2)
      delete msg;
      // turning off the node

   }
} else {
   // ...
}
...