1
2 개의 옥 플랫폼간에 ACL 메시지를 전달해야합니다. 같은 컨테이너에있는 상담원간에 메시지를 전달하는 코드를 구현했습니다. 그건 잘 작동합니다. 하지만 원격 플랫폼간에 메시지를 전달할 수있는 코드를 개발할 수는 없습니다.옥 원격 플랫폼간에 ACL 메시지 전달
다음은 동일한 컨테이너에있는 에이전트에 대해 구현 한 것입니다. 발신자 에이전트 코드에서 결과 []는 동일한 플랫폼의 에이전트 만 가져옵니다.
무엇이 누락 되었습니까? 원격 플랫폼에 에이전트 목록을 가져 오는 방법이 있습니까?
보낸 에이전트
DFAgentDescription temp = new DFAgentDescription();
try
{
//DFAgentDescription[] result = DFService.search(this,temp);
SearchConstraints sc = new SearchConstraints();
DFAgentDescription[] result=DFService.search(this,temp,sc);
ACLMessage acl = new ACLMessage(ACLMessage.REQUEST);
System.out.println("Agents: ");
for(int i=0;i<result.length;i++)
{
if(result[i].getName().getLocalName().equalsIgnoreCase("R1"))
{
acl.addReceiver(result[i].getName());
System.out.print(" , "+result[i].getName().getLocalName());
}
}
acl.setContent("Hello...");
this.send(acl);
System.out.println("Message Sent...");
}
catch(FIPAException e)
{
System.out.println("Error !: "+e);
}
수신기 에이전트
addBehaviour(new CyclicBehaviour()
{
public void action()
{
ACLMessage msg = myAgent.receive();
if(msg != null)
{
if(msg.getPerformative()== ACLMessage.REQUEST)
{
String content = msg.getContent();
if ((content != null))
{
System.out.println("Received Request from "+msg.getSender().getLocalName());
System.out.println("Received Message : "+content);
}
else
{
block();
}
}
}
else
{
block();
}
}
});
일했습니다! 정말 고마워요. – Dini88
agent-name @ platform 송신자 또는 수신자 에이전트 이름입니까? –
예, 상담원의 로컬 이름입니다. –