2013-11-04 3 views
1

BDI 에이전트와 작업해야하는데 JADEX 2.4를 사용 하겠지만 큰 문제가 있습니다. 설명서가 약간 나쁘고 에이전트간에 메시지를 교환 할 수 없습니다.JADEX 2.4의 Exchange 메시지

이 기사

http://www.activecomponents.org/bin/view/AC+Tutorial/05+Provided+Services을 읽고 그리고 난 내 코드하지만 성공에 같은 일을 시도하고있다. 나는 내 일을 위해 두 가지 일을하는 법을 알아야한다 : 한 요원에게서 다른 요원에게 메시지를 보내고 한 요원에게서 모든 요원에게 메시지를 보낸다. 누구든지 그렇게하는 법을 알고 있습니까?

ChatSystem.java

package agents; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import .... 

@Service 
public class ChatSystem implements IChatService{ 

    @ServiceComponent 
    protected IInternalAccess agent; 
    protected IClockService clock; 
    protected DateFormat format; 

    @ServiceStart 
    public IFuture<IClockService> startService(){ 

     format = new SimpleDateFormat("hh:mm:ss"); 
     final Future<IClockService> ret = new Future<IClockService>(); 
     IFuture<IClockService> fut = agent.getServiceContainer().getRequiredService("clockservice"); 
     fut.addResultListener(new DelegationResultListener<IClockService>(ret) 
     { 
      public void customResultAvailable(IClockService result) 
      { 
      clock = result; 
      super.customResultAvailable(null); 
      } 
     }); 
     return ret; 
    } 

    @Override 
    public IFuture<Void> message(String nick, String text, 
      boolean privatemessage) { 
     // TODO Auto-generated method stub 
     //System.out.println(" received at" + text); 
     System.out.println(agent.getComponentIdentifier().getLocalName()+" received at " 
       +" from: "+nick+" message: "+text); 
     return null; 
    } 
} 

HelperAgent.java

package agents; 
import java.util.Collection; 
import java.util.Date; 
import java.util.Iterator; 
import ..... 

@Agent 
@Service 
@RequiredServices({@RequiredService(name="clockservice", type=IClockService.class,[email protected](scope=RequiredServiceInfo.SCOPE_PLATFORM)),@RequiredService(name="chatservices", type=IClockService.class,[email protected](scope=RequiredServiceInfo.SCOPE_PLATFORM,dynamic=true),multiple=true)}) 
@ProvidedServices(@ProvidedService(type=IChatService.class, [email protected](ChatSystem.class))) 

public class HelperAgent { 

    @Agent 
    protected MicroAgent agent; 
    @AgentBody 
    public void AgentBody() 
    { 

     IFuture<IClockService> fut = agent.getServiceContainer().getRequiredService("clockservice"); 
     fut.addResultListener(new DefaultResultListener<IClockService>() 
     { 
      public void resultAvailable(IClockService cs) 
      { 
      System.out.println("Time for a chat, buddy: "+new Date(cs.getTime())); 
      } 
     }); 

     IFuture<Collection<IChatService>> chatservices = agent.getServiceContainer().getRequiredServices("chatservices"); 
     chatservices.addResultListener(new DefaultResultListener<Collection<IChatService>>() 
     { 
      public void resultAvailable(Collection<IChatService> result) 
      { 
      for(Iterator<IChatService> it=result.iterator(); it.hasNext();) 
      { 
       IChatService cs = it.next(); 
       cs.message(agent.getComponentIdentifier().getName(), "test",false); 
      } 
      } 
     }); 

    } 
} 

누구든지 나를 도울 수 : 내가 가지고

코드는 다음은? Jadex에서

안부

답변

2

는 활성 성분을 송신하고 서비스 일 수있는 메시지를 수신하는 것에 더하여, 즉 강화 된 제제를 나타내는 작업. 에이전트는 Java 인터페이스를 사용하여 서비스를 노출 할 수 있으며 다른 에이전트는 해당 유형을 통해 이러한 서비스를 간단히 가져올 수 있습니다. 서비스 사용은 에이전트 신원을 알 필요없이 수행됩니다. 이는 더 많은 SOA 기반 솔루션 동적 서비스 공급자를 구축하는 데 도움이됩니다.

메시지를 통해 통신하려면 API는 사용중인 구성 요소의 유형에 따라 다릅니다. 마이크로 에이전트의 경우 (스 니펫에서와 같이)에서 당신은 단지 FIPA 메시지를 준비 할 수 있습니다 아래와 같이 에이전트 API에 sendMessage 첨부를 호출

Map msg = new HashMap(); 
msg.put(SFipa.CONTENT, content); 
msg.put(SFipa.PERFORMATIVE, SFipa.QUERY_IF); 
msg.put(SFipa.CONVERSATION_ID, "someuniqueid"); 
msg.put(SFipa.RECEIVERS, new IComponentIdentifier[]{receiver}); 
msg.put(SFipa.SENDER, getComponentIdentifier()); 
agent.sendMessage(msg, SFipa.FIPA_MESSAGE_TYPE); 

을 '에이전트'주입 된 MicroAgent 인으로.

친절한 답변 라스 (Lars)

관련 문제