【发布时间】:2015-02-19 10:11:12
【问题描述】:
我对 Jade 和多代理系统很陌生。 我正在尝试构建一个包含多个代理的系统,这些代理必须通过发送 ACLMessage 进行通信。我已经阅读了有关如何构建代理类结构的文档。
这是我的代码:
public class ServerCommunicationAgent extends Agent {
public static String serverAddress = "http://LO-LESTER-077:8080";
private static final long serialVersionUID = 1L;
protected void setup() {
System.out.println(getLocalName() + ": correctly started");
boolean state = true;
// A Class that has a socket with my server
CommunicationService.getInstance().ServerCommunicationAgent(state);
// Sends a tick every millisecond
addBehaviour(new TickerBehaviour(this, 10000) {
private static final long serialVersionUID = 1L;
@Override
protected void onTick() {
ACLMessage message = new ACLMessage(ACLMessage.INFORM);
message.setContent("OK");
message.setLanguage("English");
message.setOntology("Test Dialogue");
message.setConversationId("TestID");
message.addReceiver(new AID("SecurityAgent", AID.ISLOCALNAME));
send(message);
}
});
}
// This method is called from CommunicationService when i have a response
public void LaunchServiceAgent(final String Agent, final String Location){
System.out.println(": Agent received service request: " + Agent + " in " + Location + " and has to call " + Agent + Location);
addBehaviour(new Behaviour(this) {
private static final long serialVersionUID = 1L;
@Override
public void action() {
ACLMessage messages = new ACLMessage(ACLMessage.INFORM);
messages.setContent("Hello world");
messages.setLanguage("English");
messages.setOntology("Test Dialogue");
messages.setConversationId("TestID");
messages.addReceiver(new AID(Agent + Location, AID.ISLOCALNAME));
send(messages);
}
@Override
public boolean done() {
return false;
}
});
}
正如我在代码中解释的那样,当代理启动时,它会向我的服务器发送一条消息。它通过 LaunchServiceAgent 方法接收消息。我正确收到了我的消息,但我无法使用 ACLMessage 将其发送给另一个代理。我认为我的代码是正确的,因为我的 TickBehaviour 工作正常。
所以我的问题是,我如何通过我的方法正确地向另一个代理发送消息?
感谢您的回复:)
【问题讨论】:
标签: java agents-jade