1

現在、JADEを使用したトピックベースの通信を使用しています。jade.core.messaging.TopicManagementFEService同じプラットフォームのメインコンテナに接続することで、JADEエージェントを登録できます。

詳細は以下のとおりです。

  1. Main-Container:Main-Containerをホストする単純なLAMP/WAMPサーバー。
  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();
    }
  }
}

ここでどこが間違っているのですか?else受信したメッセージがNULLであると言うのは明らかなAndroid側の部分を常に実行します!

4

2 に答える 2

1

どうでも。論理が間違っていた。Android-AgentはCentral-Agentに対して自分自身を識別していませんでした。

セントラルエージェントがそのようなメッセージを識別し、それに応じてメッセージを送信できるように、オントロジーを設定しました。今、メッセージを受信して​​います!

自助は時々働きます!;-)

于 2013-01-04T04:37:21.583 に答える
1

トピックメッセージの受信は、JADEのバージョン4.3.0までのAndroidでは正しく機能しません。Androidはトピックメッセージを送信できますが、受信できません。私は自分の問題からこれを見つけました。私はスタックオーバーフローに関する私自身の質問でそれについてのより多くの情報を投稿しました。

見てください。 JADELeapAndroidアプリがトピックメッセージを受信できません

于 2013-06-03T18:39:49.847 に答える