1

我目前正在使用 JADE 使用基于主题的通信。我可以注册一个 JADE 代理,jade.core.messaging.TopicManagementFEService从而连接到同一平台中的主容器。

详情如下:

  1. Main-Container:一个简单的 LAMP/WAMP 服务器,托管 Main-Container。
  2. 客户端:用于连接主容器的 Android 模拟器(测试目的)。

目前,

  1. 服务器启动主容器
  2. Android 模拟器成功连接到主容器(代理创建并启用主题管理服务)
  3. 服务器正在根据特定主题发送消息。

但是我的Android客户端虽然注册的主题两端是一样的,但是却收不到这个消息!

你可以看到下面的代码:

Server Side:

TopicManagementHelper topicHelper = (TopicManagementHelper) getHelper(TopicManagementHelper.SERVICE_NAME);
final AID sensorTopic = topicHelper.createTopic("JADE");
topicHelper.register(sensorTopic);

addBehaviour(new TickerBehaviour(this, TIMER_VALUE_IN_MILLISECONDS) {

private static final long serialVersionUID = -2567778187494378326L;

    public void onTick() {

        ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
        msg.addReceiver(eventTopic);
        msg.setContent(eventValue);
        myAgent.send(msg);
    }
});

Android Side:

// Registering on Android Side as well
TopicManagementHelper topicHelper = (TopicManagementHelper) getHelper(TopicManagementHelper.SERVICE_NAME);
topic = topicHelper.createTopic("JADE"); // See, same topic!
topicHelper.register(topic);

behaviour = new myBehaviour(this, TIMER_VALUE_IN_MILLISECONDS, topic);
addBehaviour(behaviour);

private class myBehaviour extends TickerBehaviour {

 private static final long serialVersionUID = 4782913834042415090L;
 AID topic;
 Agent agent;
 MessageTemplate tpl;

   public myBehaviour(Agent a, long period, AID topic) {
    super(a, period);

    this.agent = a;
    this.topic = topic;
   }

   public void onTick() {
    tpl = MessageTemplate.MatchTopic(topic);
    ACLMessage msg = receive(tpl);
    if (msg != null) {
       logger.log(Level.INFO, "Agent "+ agent.getLocalName() + 
                           ": Message about topic "+ topic.getLocalName() +" received. \n" +
                                    "Content is " + msg.getContent());
       data = msg.getContent();

    } else {
       logger.log(Level.INFO, "In here..."); // Always executes only this code!
       block();
    }
  }
}

我在哪里错了?它总是执行elseAndroid端的部分,很明显收到的消息是NULL!

4

2 回答 2

1

在 JADE 中,Android 4.3.0 及以下版本无法正常接收主题消息。Android 可以发送主题消息但无法接收。我通过自己的问题发现了这一点。我已经在我自己关于堆栈溢出的问题中发布了有关它的更多信息。

看一看。 JADE Leap Android App 无法接收主题消息

于 2013-06-03T18:39:49.847 回答
1

没关系。逻辑是错误的。Android-Agent 没有向 Central-Agent 标识自己。

我设置了本体,以便中央代理能够识别此类消息并相应地发送消息。现在,它正在接收消息!

自助有时有效!;-)

于 2013-01-04T04:37:21.583 回答