我已经编写了一个Agent并将其添加到节点1以使用在代理startup()方法内工作的RemoteGetParamReq来获取节点2的PhysicalParameters(传播速度,节点能量等)。如何在agent processRequest()方法内使用RemoteGetParamReq因为我想在节点1触发DatagramReq时获取远程节点2的参数值,所以我可以获得最新的参数值。
./gradlew build --dry-run
答案 0 :(得分:0)
processRequest()
方法应该完成才能响应请求者,因此,在其中发出参数请求并等待是个好主意。但是,您可以通过添加OneShotBehavior
这样的内容来触发参数异步请求:
@Override
Message processRequest(Message msg) {
if (msg instanceof DatagramReq) {
add(new OneShotBehavior() {
@Override
public void action() {
req = new RemoteGetParamReq();
req.setRecipient(rmt);
req.setRemoteAgentID(phy);
req.setTo(2);
req.get(PhysicalParam.propagationSpeed);
req.get(PhysicalParam.timestampedTxDelay);
req.get(MyEnergyParameters.init_energy);
rsp = phy.request(req, 2000);
System.out.println "Node 2 propogation speed:"+rsp.get(PhysicalParam.propagationSpeed)
System.out.println "Node 2 energy:"+rsp.get(MyEnergyParameters.init_energy)
} // action
} // one shot behavior
return new Message(msg, Performative.AGREE)
}
return null
} // process request
旁注:DatagramReq
可能不是触发此请求的正确请求,因为它要求您的代理发送数据报。您可能希望为此定义一个自己的适当命名的请求,以实现良好的编程风格。