Вы можете написать агента, который получает сообщение от другого узла и просто устанавливает свое собственное местоположение на основе этого.Пример фрагмента кода:
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
в стеке на целевом узле.