Метод 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
, возможно, не тот запрос, чтобы инициировать это,поскольку он просит вашего агента отправить дейтаграмму.Возможно, вы захотите определить свой собственный запрос с соответствующим именем для этой цели для хорошего стиля программирования.