2012-02-01 5 views
2

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

ответ

4

Вы можете достичь этого, используя класс 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) Разработка многоагентных систем с нефритом Фабио Луиджи Bellifemine, Джованни Caire, Доминик Гринвуд (стр 111) 2) Jade API

+0

как я добраться до узнать список доступных контейнеров? Это не позволяет мне получить доступ к int size(), поскольку это частный член. Что делать? – Purushottam

+0

Добавить публичный сеттер/getter в ArrayList. Например: public int getAvailableContainersSize() {return availableContainers.size();} – Ravi

+0

Я все еще не получаю, как отображать список всех контейнеров, пожалуйста, не могли бы вы мне помочь, где разместить код и что ... – Purushottam