#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
агент, включенный в стеке на целевом узле.