【发布时间】:2012-02-01 10:47:46
【问题描述】:
我想获取当前平台中所有容器的列表。 This question 类似,但答案已过时,方法是向 AMS 代理查询。有没有比通过我认为复杂的 ACL 消息进行通信更简单的方法,应该有一种方法来获得一个简单的容器列表。感谢您的帮助
【问题讨论】:
我想获取当前平台中所有容器的列表。 This question 类似,但答案已过时,方法是向 AMS 代理查询。有没有比通过我认为复杂的 ACL 消息进行通信更简单的方法,应该有一种方法来获得一个简单的容器列表。感谢您的帮助
【问题讨论】:
您可以通过使用 AMSSubscriber 类来实现这一点,并在添加或删除容器时监听事件。请参阅下面的示例代码:
public class myAgent extends Agent {
private ArrayList<ContainerID> availableContainers = new ArrayList<ContainerID>();
/**
* Agent initializations
**/
protected void setup() {
AMSSubscriber subscriber = new AMSSubscriber(){
protected void installHandlers(Map handlers){
EventHandler addedHandler = new EventHandler(){
public void handle(Event event){
AddedContainer addedContainer = (AddedContainer) event;
availableContainers.add(addedContainer.getContainer());
}
};
handlers.put(IntrospectionVocabulary.ADDEDCONTAINER,addedHandler);
EventHandler removedHandler = new EventHandler(){
public void handle(Event event){
RemovedContainer removedContainer = (RemovedContainer) event;
ArrayList<ContainerID> temp = new ArrayList<ContainerID>(availableContainers);
for(ContainerID container : temp){
if(container.getID().equalsIgnoreCase(removedContainer.getContainer().getID()))
availableContainers.remove(container);
}
}
};
handlers.put(IntrospectionVocabulary.REMOVEDCONTAINER,removedHandler);
}
};
addBehaviour(subscriber);
}
}
参考:1) 使用 JADE 开发多智能体系统 作者:Fabio Luigi Bellifmine、Giovanni Caire、Dominic Greenwood(第 111 页) 2)Jade API
【讨论】: