unetsim:是否有通过从另一个节点传递命令将节点从一个坐标移动到另一个坐标的功能?
unetsim: Is there a functionality to move a node from one coordinate to another by passing command from another node?
有没有一种方法可以命令一个节点使用另一个节点移动到特定位置,例如特定坐标?如果是这样,请分享示例代码(如果可能)。
谢谢
您可以编写一个代理,从另一个节点接收消息,并根据该消息设置自己的位置。示例代码片段:
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]
}
}
此方法将允许您在代理中实现复杂的行为,例如将节点缓慢移动到该位置。
作为替代方案,如果您只需要即时更改位置,您还可以考虑 运行 a command/script 使用目标节点(例如 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
代理。
有没有一种方法可以命令一个节点使用另一个节点移动到特定位置,例如特定坐标?如果是这样,请分享示例代码(如果可能)。
谢谢
您可以编写一个代理,从另一个节点接收消息,并根据该消息设置自己的位置。示例代码片段:
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]
}
}
此方法将允许您在代理中实现复杂的行为,例如将节点缓慢移动到该位置。
作为替代方案,如果您只需要即时更改位置,您还可以考虑 运行 a command/script 使用目标节点(例如 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
代理。