【发布时间】:2023-03-20 12:02:01
【问题描述】:
总结:
IDE:Eclipse
服务器:Java
客户端:HTML/Javascript
在通过 ajax/jquery 将数据发送到 servlet 并使用 JadeGateway 将这些信息发送到代理后,生成的数据应该返回到 html/javascript。
我需要一种将 servlet 或代理与现有且正在运行的 html 文件(ofc 无需重新加载页面)连接的方法。
背景:
我想使用 babylon.js 和jade/pug(我们称之为jade)创建一个基于代理的游戏。
在游戏过程中,游戏状态的信息应该传递给代理,以便他可以弄清楚要做什么(例如创建更多单位或攻击)。在此之后,代理需要将信息发送给游戏,以调用相应的函数。
到目前为止我做了什么:
我使用 ajax 将游戏 (html/javascript) 与 servlet 连接起来。在那里,我使用 JadeGateway 向代理发送 ACLMessage。
我还使用 websockets 来连接客户端/服务器,但这种方法对于我需要的东西来说太有限了。
我现在需要一个工具/方法或提示来从代理或 servlet 发送信息。两者都是可能的,因为代理可以将信息发送回jadegateway 代理/servlet。
我知道如何使用 ajax 从 html 调用 servlet 并立即返回,但现在信息被转移到其他一些类,所以不再起作用了。
在 babylon.js 的 scene.registerBeforeRender 函数中,我这样做:
$.ajax({
url: "AgentListenerServlet",
type: "POST",
data: {playerString: convertPlayerToJson(player1)},
success: function(data) {
alert(data.command)
},
error: function() {
alert("Listener Failed")
}
});
通过jadegateway向代理发送消息:
JadeGateway.execute(new CyclicBehaviour() {
public void action() {
final ACLMessage msgSend = new ACLMessage(ACLMessage.INFORM);
msgSend.setContent(message);
msgSend.addReceiver(new AID("First", AID.ISLOCALNAME));
myAgent.send(msgSend);
final ACLMessage msgReceive = myAgent.receive();
if(msgReceive != null && msgReceive.getContent() != null){
//used this as immediate answer for ajax success function, but maybe it can also be used to send the returning agent message?
Map <String, Object> map = new HashMap<String, Object>();
map.put("command", "information");
write(response, map);
} else {
block();
}
}
});
private void write(HttpServletResponse response, Map<String, Object> map) throws IOException {
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(map));
}
代理代码(简体):
public void action() {
final ACLMessage msgSend = new ACLMessage(ACLMessage.INFORM); //sending message
final ACLMessage msgReceive = receive(); //receiving message
//Here i get information out of sent json objects from jadegateway
//Maybe here send handled information back to html?
} else {
block();
}
}
也许不需要显示这些代码,因为它们正在工作并且问题不存在,但是用于提问的模板要求这些。
预期和结果:
所以问题不在于它不起作用,而是我需要知道如何继续。
我不知道我期望什么,因为我不知道可能性。
也许,对我有帮助的是从代理或 servlet 发送一个简单的字符串,我可以在游戏中使用警报函数调用它。
或者我应该问这个问题:在将数据发送到 servlet 并传递给代理后,是否有可能在 ajax(成功函数)中得到答案?
对于大量垃圾邮件,我们深表歉意。希望我把我的问题说清楚了。
【问题讨论】:
-
当您说 Jade 时,您是指多代理平台,对吗? Pug 是一个模板引擎,曾经被称为玉,所以即使提到它也很混乱
标签: javascript java html babylonjs agents-jade