unetsim: есть ли функция для перемещения узла из одной координаты в другую путем передачи команды от другого узла? - PullRequest
2 голосов
/ 13 апреля 2019

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

Спасибо

1 Ответ

3 голосов
/ 13 апреля 2019

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

void processMessage(Message msg) {
  if (msg instanceof DatagramNtf && 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 в стеке на целевом узле.

...