是否有一种方法可以命令一个节点使用另一个节点移动到特定位置(例如特定坐标)?如果是这样,请共享示例代码(如果可能)。
谢谢
答案 0 :(得分:3)
您可以编写一个代理来接收来自另一个节点的消息,并根据该代理设置自己的位置。示例代码段:
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
代理。