Я хочу подключиться к агенту, созданному в Main Container, который запускается на компьютере. Предположим, что главный идентификатор CONtainer - [email protected] Как я могу подключиться к агенту внутри этого контейнера и передать данные? Заранее спасибо.Как отправить сообщение агенту в Main Container через http в Jade?
1
A
ответ
1
Вам понадобится ContainerController (будь то для основного контейнера или контейнера агента, не имеет значения), который является частью платформы агента, с которой вы связаны.
Простым способом получить это было бы просто создать новый контейнер агента и подключить его к платформе.
import jade.core.Runtime;
import jade.core.Profile;
import jade.core.ProfileImpl;
...
Runtime myRuntime = Runtime.instance();
// prepare the settings for the platform that we're going to connect to
Profile myProfile = new ProfileImpl();
myProfile.setParameter(Profile.MAIN_HOST, "myhost");
myProfile.setParameter(Profile.MAIN_PORT, "1099");
// create the agent container
ContainerController myContainer = myRuntime.createAgentContainer(myProfile);
то, вы можете использовать getAgent()
метод ContainerController получить AgentController.
AgentController myAgentController = myContainer.getAgent("agent-local-name");
наконец, если вы хотите передать данные Агента, вы можете сделать это с помощью O2A (Object 2 Агент) сообщения. Это в основном позволяет передавать любой объект агенту через контроллер агента.
Object myObject = "Real-Object-Would-Go-Here";
myAgentController.putO2AObject(myObject, false);
в агента (предпочтительно в пределах поведения), вы можете слушать для этого объекта, как это:
// start accepting O2A communications
setEnabledO2ACommunication(true, 0);
// start monitoring them
addBehaviour(new CyclicBehaviour(this) {
@Override
public void action() {
// get an object from the O2A mailbox
Object myObject = myAgent.getO2AObject();
// if we actually got one
if(myObject != null) {
// do something with it
} else {
block();
}
}
});
Источники: JADE документация