unetsim: есть ли возможность переместить узел из одной координаты в другую, передав команду с другого узла?

#unetstack

#unetstack

Вопрос:

Есть ли способ дать команду одному узлу, используя другой узел, переместиться в определенное местоположение, например, в определенную координату? Если да, пожалуйста, поделитесь примером кода (если это возможно).

Спасибо

Ответ №1:

Вы можете написать агент, который получает сообщение от другого узла и просто устанавливает свое собственное местоположение на основе этого. Пример фрагмента кода:

 void processMessage(Message msg) {
  if (msg instanceof DatagramNtf amp;amp; msg.protocol == MY_PROTOCOL) {
    // extract location x, y from msg based on your PDU encoding
    def node = agentForService Services.NODE_INFO
    node.location = [x, y]
  }
}
  

Этот метод позволит вам реализовать сложные модели поведения, такие как медленное перемещение узла в нужное место в вашем агенте.

В качестве альтернативы, если все, что вам нужно, это мгновенно изменить местоположение, вы также можете рассмотреть возможность запуска команды / сценария с использованием удаленной службы на целевом узле (например, 2), чтобы установить его собственное местоположение (например, [10,10]):

 send new RemoteScriptReq(to: 2, scriptName: '@node.location = [10,10]')
  

@ Префикс заставляет scriptName интерпретироваться как команда, а не как локально сохраненный скрипт. Обратите внимание, что этот префикс будет работать в версиях до 1.4, но поведение будет изменено в предстоящем выпуске UnetStack для использования нового сообщения RemoteExecReq :

 send new RemoteExecReq(to: 2, command: 'node.location = [10,10]')
  

Для работы удаленной службы вам нужен RemoteControl агент, включенный в стеке на целевом узле.