如何在代理的processRequest中使用RemoteGetParamReq获取远程节点的参数

时间:2019-07-09 11:29:30

标签: unetstack

我已经编写了一个Agent并将其添加到节点1以使用在代理startup()方法内工作的RemoteGetParamReq来获取节点2的PhysicalParameters(传播速度,节点能量等)。如何在agent processRequest()方法内使用RemoteGetParamReq因为我想在节点1触发DatagramReq时获取远程节点2的参数值,所以我可以获得最新的参数值。

./gradlew build --dry-run

1 个答案:

答案 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可能不是触发此请求的正确请求,因为它要求您的代理发送数据报。您可能希望为此定义一个自己的适当命名的请求,以实现良好的编程风格。