Получение списка всех контейнеров JADE - PullRequest
2 голосов
/ 01 февраля 2012

Я хочу получить список всех контейнеров на текущей платформе. Этот вопрос похож, но ответ устарел, и метод заключается в запросе к агенту AMS.Есть ли более простой выход, чем общение через ACL-сообщения, которые, на мой взгляд, сложны, должен быть выход, чтобы получить простой список контейнеров.Спасибо за вашу помощь

1 Ответ

5 голосов
/ 02 февраля 2012

Этого можно добиться с помощью класса 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 Фабио Луиджи Беллифемайн, Джованни Каир, Доминик Гринвуд (стр. 111) 2) Jade API

...