如何将jade代理(java)和babylon.js(html/javascript)-Servlet连接到html?
总结:如何将jade代理(java)和babylon.js(html/javascript)-Servlet连接到html?,javascript,java,html,babylonjs,agents-jade,Javascript,Java,Html,Babylonjs,Agents Jade,总结: IDE:Eclipse 服务器:Java 客户端:Html/Javascript 在通过ajax/jquery将数据发送到servlet并使用JadeGateway将这些信息发送到代理之后,生成的数据应该返回到html/javascript。 我需要一种方法将servlet或代理与现有的正在运行的html文件(ofc)连接起来,而无需重新加载页面 背景: 我想使用babylon.js和jade/pug(我们称之为jade)创建一个基于代理的游戏。 在游戏中,有关游戏状态的信息应该传递给代
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。 我还使用WebSocket连接客户机/服务器,但这种方法对于我所需要的东西来说太有限了。 我现在需要一个工具/方法或提示来从代理或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));
}
也许显示这些代码是没有必要的,因为它们正在工作,问题不在那里,但是询问问题的模板要求这些代码
预期结果:所以问题不在于它不起作用,而是我需要知道如何继续。 我不知道我期望什么,因为我不知道可能性。 也许,对我有帮助的是,从代理或servlet发送一个简单的字符串,我可以在游戏中使用alert函数调用它 或者我应该问:在将数据发送到servlet并传递给代理之后,是否有可能在ajax(成功函数)中得到答案
很抱歉收到这么多垃圾邮件。希望我把我的问题说清楚。无需回答,WebSocket毕竟是解决方案。 我刚刚发现,您可以将数据从服务器推送到客户端,而无需客户端请求
session.getBasicRemote().sendText(msgReceive.getContent());
会话是自动生成的,您可以使用websockets onopen方法重新启用会话:
@OnOpen
public void onOpen(Session session){
this.session = session;
}
当你说Jade时,你指的是多代理平台,对吗?帕格是一个模板引擎,过去被称为jade,所以如果不这样说的话,会让人很困惑
@OnOpen
public void onOpen(Session session){
this.session = session;
}