0

問題は、トピック メッセージを使用してそれらの間でメッセージを送信する 2 つの Android ハンドセットを使用することです。両者が send を使用し、互いの AID を持っている場合、両者は問題なく互いからメッセージを受信できます。ただし、トピックメッセージ機能の送信を使用すると、機能しません。

ただし、問題なく Android プラットフォームからメッセージを受信できるデスクトップ アプリケーションがあります。しかし、Android プラットフォームはそれらからメッセージを受信できません。

Android でトピック メッセージを受信するために必要な特別な手順はありますか?

JADE に接続するためのプロファイルを作成する場合、トピック管理サービスは以下のように設定されます。

profile.setProperty(Profile.SERVICES, "jade.core.messaging.TopicManagementFEService");

これのトラブルシューティングに関する提案はありますか? これを確認するためにスニファを使用しましたが、2 つの Android スマートフォン間でメッセージが送信されません。しかし、それは間違いなく PC アプリに送信されます。

管理 GUI のコンソールを見ると、次のようなメッセージが表示されます。

May 25, 2013 2:21:25 PM jade.core.BackEndContainer messageOut
INFO: BE-192.168.1.114_55555-1@192.168.1.114 - Delivering OUT message INFORM, size=431

JADE リモート エージェント管理 GUI は、次の引数を使用してデスクトップ上で実行されています。

java -cp .;%JADE_JARS% jade.Boot -gui -host %JADE_IP% -port %JADE_PORT% -nomtp -jade_domain_df_autocleanup true -services jade.core.messaging.TopicManagementService;jade.core.event.NotificationService;jade.core.mobility.AgentMobilityService;jade.core.event.NotificationService;jade.imtp.leap.nio.BEManagementService;

エージェントは、次のコードでトピックにサブスクライブします

public void subscribeTopic(String... topics)
{
    for (String topic : topics)
    {
        TopicManagementHelper helper = (TopicManagementHelper) getHelper(TopicManagementHelper.SERVICE_NAME);
        if (helper != null)
        {
            AID topicID = helper.createTopic(topic.toLowerCase());
            try
            {
                helper.register(topicID);
                this.subscribedTopics.add(topic.toLowerCase());
            }
            catch (ServiceException e)
            {
                logger.log(Level.SEVERE, "Could not subscribe to topic '" + topic + "'.", e);
            }
        }
    }
}

これは、TickerBehaviour を使用してメッセージを受け取る動作です。

public void onTick()
{
    boolean done = false;
    String topic="location";

    LocationData navupdate = readTopicMessageContent(topic, ACLMessage.INFORM, LocationData.class);
    if (navupdate != null )
    {
        while (!done){
            navupdate = myLocalAgent.readTopicMessageContent(topic, ACLMessage.INFORM, LocationData.class);
            if (navupdate == null)
                done = true;
        }
    }
    block();

}

トピック メッセージを送信するコードは次のとおりです。

public void sendTopicMessageContent(String topicName, int performative, Serializable object)
{

            ACLMessage message = new ACLMessage(performative);
    message.setOntology(object.getClass().getName());
    message.setContentObject(object);

            TopicManagementHelper helper = getTopicManager();
    AID rcvr=helper.createTopic(topic.toLowerCase());

    message.addReceiver(rcvr);
    send(message);
}
4

1 に答える 1