現在、JADEを使用したトピックベースの通信を使用しています。jade.core.messaging.TopicManagementFEService
同じプラットフォームのメインコンテナに接続することで、JADEエージェントを登録できます。
詳細は以下のとおりです。
- Main-Container:Main-Containerをホストする単純なLAMP/WAMPサーバー。
- クライアント:メインコンテナーに接続するためのAndroidエミュレーター(テスト目的)。
現在、
- サーバーがメインコンテナを起動します
- Androidエミュレーターがメインコンテナーに正常に接続します(トピック管理サービスが有効になっている状態で作成されたエージェント)
- サーバーは特定のトピックに基づいてメッセージを送信しています。
しかし、登録されているトピックは両端で同じですが、私の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側の部分を常に実行します!