誰かがJavaコードを介して利用可能なエージェントコンテナを見つける方法を教えてもらえますか?JADEエージェントフレームワークを使用していますが、新しいコンテナーを作成する方法を理解しましたが、既存のコンテナーを見つけることができません(エージェントをコンテナーにデプロイできるようにするため)。
質問する
5666 次
1 に答える
5
これには、進行中のサービスを介して情報を受け取るか、メッセージで現在のスナップショットを受け取るかによって、2 つの方法があります。
現在使用可能なエージェント コンテナーの ID のスナップショットを取得するには、要求メッセージをエージェント管理サービス (AMS) に送信し、その応答を待ちます。JADE Management Ontology とQueryPlatformLocationsAction用語を使用すると、送信メソッドと受信メソッドは次のようになります。
private void queryAMS() throws CodecException, OntologyException {
QueryPlatformLocationsAction query = new QueryPlatformLocationsAction();
Action action = new Action(myAgent.getAID(), query);
ACLMessage message = new ACLMessage(ACLMessage.REQUEST);
message.addReceiver(myAgent.getAMS());
message.setLanguage(FIPANames.ContentLanguage.FIPA_SL);
message.setOntology(JADEManagementOntology.getInstance().getName());
myAgent.getContentManager().fillContent(message, action);
myAgent.send(message);
}
private void listenForAMSReply() throws UngroundedException, CodecException,
OntologyException {
ACLMessage receivedMessage = myAgent.blockingReceive(MessageTemplate
.MatchSender(myAgent.getAMS()));
ContentElement content = myAgent.getContentManager().extractContent(
receivedMessage);
// received message is a Result object, whose Value field is a List of
// ContainerIDs
Result result = (Result) content;
List listOfPlatforms = (List) result.getValue();
// use it
Iterator iter = listOfPlatforms.iterator();
while (iter.hasNext()) {
ContainerID next = (ContainerID) iter.next();
System.out.println(next.getID());
}
}
この情報を継続的なサービスとして取得し、AMS への登録時に各コンテナーの ContainerID を受け取るには、AMSSubscriber を拡張する Behavior を作成します。addedContainer イベントのハンドラーを登録すると、新しく利用可能なコンテナーの ContainerID にアクセスできるようになります。
public class AMSListenerBehaviour extends AMSSubscriber {
@Override
public void installHandlers(Map handlersTable) {
handlersTable.put(AddedContainer.NAME, addedContainerHandler);
}
public final class AddedContainerHandler implements EventHandler {
@Override
public void handle(Event ev) {
AddedContainer event = (AddedContainer) ev;
ContainerID addedContainer = event.getContainer();
System.out.println(addedContainer.getID());
}
お役に立てれば、
ラス
于 2009-12-10T09:26:51.507 に答える