問題は、トピック メッセージを使用してそれらの間でメッセージを送信する 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);
}