Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将jade代理(java)和babylon.js(html/javascript)-Servlet连接到html?_Javascript_Java_Html_Babylonjs_Agents Jade - Fatal编程技术网

如何将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;
    }