Резюме:
IDE: Затмение
Сервер: Java
Клиент: HTML / Javascript
После отправки данных через ajax / jquery сервлету и использования JadeGateway для отправки этой информации агенту, полученные данные должны вернуться в html / javascript.
Мне нужен способ подключения сервлета или агента к существующему и запущенному html-файлу (ofc без перезагрузки страницы).
Справка:
Я хочу создать агентскую игру, используя babylon.js и jade / pug (назовем это jade).
Во время игры информация о состоянии игры должна быть передана агенту, чтобы он мог понять, что делать (например, создавать больше юнитов или атаковать). После этого агенту необходимо отправить информацию в игру, чтобы вызвать соответствующую функцию.
Что я сделал до сих пор:
Я связал игру (html / javascript) с сервлетом, используя ajax. Там я использовал JadeGateway, чтобы отправить ACLMessage агенту.
Я также использовал websockets для подключения клиент / сервер, но этот метод слишком ограничен для того, что мне нужно, я думаю.
Теперь мне нужен инструмент / метод или советы для отправки информации от агента или сервлета. И то и другое возможно, потому что агент может отправить информацию обратно агенту / сервлету jadegateway.
Я знаю, как использовать ajax для вызова сервлета из html и обратно, но теперь информация передается некоторым другим классам, так что это больше не работает.
В функции 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();
}
}
Возможно, показывать эти коды не нужно, потому что они работают, и проблема не в этом, но шаблон для того, чтобы задать вопрос, запросил их.
Ожидаемые результаты:
Так что проблема не в том, что это не работает, а в том, что мне нужно знать, как продолжить.
Я не знаю, чего я ожидаю, потому что я не знаю возможностей.
Может быть, мне поможет отправка простой строки от агента или сервлета, которую я могу вызвать с помощью функции оповещения в игре.
Или, может быть, я должен спросить это: возможно ли получить ответ в ajax (функция успеха) после того, как данные были отправлены сервлету и переданы агенту?
Извините за огромный спам. Надеюсь, я прояснил свою проблему.