現在のプラットフォームにあるすべてのコンテナーのリストを取得したいと考えています。この質問は似ていますが、答えは時代遅れであり、方法は AMS エージェントに問い合わせることです。複雑だと思うACLメッセージを介して通信するよりも簡単な方法はありますか?コンテナの簡単なリストを取得する方法があるはずです。ご協力いただきありがとうございます
3184 次
1 に答える
5
これを実現するには、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 Belllifemine、Giovanni Caire、Dominic Greenwood 著 (111 ページ) 2) Jade API
于 2012-02-02T02:51:19.593 に答える