1

我想连接到在计算机上运行的主容器中创建的代理。假设主容器 ID 是 Main-Container@192.118.2.3 我如何连接到该容器内的代理并传递数据?提前致谢。

4

1 回答 1

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(对象 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 文档

于 2013-12-09T06:18:57.587 回答