gpt4 book ai didi

java - 在 JADEX 2.4 上交换消息

转载 作者:行者123 更新时间:2023-11-30 04:10:16 26 4
gpt4 key购买 nike

我必须与 BDI Agents 合作,为此我将使用 JADEX 2.4,但我有一个大问题。该文档有点差,我无法在代理之间交换消息。

我读过这篇文章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,binding=@Binding(scope=RequiredServiceInfo.SCOPE_PLATFORM)),@RequiredService(name="chatservices", type=IClockService.class,binding=@Binding(scope=RequiredServiceInfo.SCOPE_PLATFORM,dynamic=true),multiple=true)})
@ProvidedServices(@ProvidedService(type=IChatService.class, implementation=@Implementation(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 中,您可以使用代表增强代理的 Activity 组件,即除了发送和接收消息之外,您还可以使用服务。代理可以使用 Java 接口(interface)公开服务,其他代理可以简单地通过其类型获取这些服务。使用服务通信无需知道代理身份即可完成。这有助于构建更多 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);

“代理”是注入(inject)的 MicroAgent。

亲切的问候拉尔斯

关于java - 在 JADEX 2.4 上交换消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19778315/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com