0

问题涉及使用两个 android 手机,它们使用主题消息在它们之间发送消息。如果他们都使用 send 并拥有彼此的 AID,他们可以很好地接收彼此的消息。但是,当使用主题消息功能的发送时,它无法工作。

但是,我有一个桌面应用程序,可以毫无问题地接收来自 android 平台的消息。但是android平台无法接收到他们的消息。

我需要对 Android 执行什么特殊步骤来接收主题消息吗?

创建配置文件以连接到 JADE 时,主题管理服务设置如下

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

关于解决此问题的任何建议?我用嗅探器查看了这个,两个安卓手机之间没有发送消息。但它肯定会发送到 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 Remote Agent Management 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

1

经过一番拉扯和挫折之后,我修改了 JADE 下载中标题为 topic 的示例代码,以便在 Android 上运行。这仍然没有奏效。我将它发布到 JADE 电子邮件列表并收到以下回复。请注意以供将来参考,这是 4.3.0 版

你好,

实际上,拆分容器中代理的主题注册管理方式存在错误。

非常感谢您的指示。

现在应该解决这个问题。为了获得修复您应该从 JADE SVN 存储库获取最后的 JADE 源(仅限服务器端:jadeAndroid 完全不受此修复的影响)并重新编译整个源。

如果您仍有问题,请告诉我们。

再见,乔瓦尼

于 2013-06-03T18:07:49.857 回答