2

現在のプラットフォームにあるすべてのコンテナーのリストを取得したいと考えています。この質問は似ていますが、答えは時代遅れであり、方法は AMS エージェントに問い合わせることです。複雑だと思うACLメッセージを介して通信するよりも簡単な方法はありますか?コンテナの簡単なリストを取得する方法があるはずです。ご協力いただきありがとうございます

4

1 に答える 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 に答える