unetsim:是否存在通过从另一个节点传递命令来将节点从一个坐标移动到另一坐标的功能?

时间:2019-04-13 17:50:07

标签: unetstack

是否有一种方法可以命令一个节点使用另一个节点移动到特定位置(例如特定坐标)?如果是这样,请共享示例代码(如果可能)。

谢谢

1 个答案:

答案 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代理。