Java-сервлет и JavaScript получить запрос: несколько запросов к одному сервлету, обновленное состояние игры - PullRequest
0 голосов
/ 01 марта 2019

У меня есть:

  • класс Java Game.java (содержит массив целых чисел, представляющих игровое поле и метод, который обновляет это поле)
  • сервлет StartServlet (создает новый экземпляр Game, обновляет его 1 раз и отправляет ответ JSON с этим полем)
  • и функция Javascript updateState() (принимает ответ сервлета и вносит в него изменения в документе):

    public class Game  {
       private int[][] field;
    
       public Game(int size)  {
         //creates field of int[size][size] and randomly puts 1s and 0s inside
       }
    
       public void update()  {
         //updates field (1 or 0), depending on some rules
       }
    
       public String toString()  {
         //returns a String representation of the field array
       }
    
       public int[][] getField()  {return field;}
    }
    

и сервлет, который использует класс Game:

public class StartServlet extends HttpServlet {
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        JSONArray jsonArray = new JSONArray();
        Game game = new Game(15);
        game.update();   

        for (int i=0; i<game.getField().length; i++)  {
          //transfer data from the game's field to JSON
       }

       response.getWriter().println(jsonArray.toString());
     }
}

Спереди, когда нажимается кнопка, Javascriptпринимает массив JSON, который возвращает StartSevlet

$(document).on("click", "#start-button", function () {  
            //update game's state every second
            var timerId = setInterval(updateState, 1000);

            //do it for 5 seconds  
            setTimeout(function() {  
                clearInterval(timerId);
                alert( 'stop' );
            }, 5000);
});

function updateState()  {
        getResponseField(drawFieldJSON);
}

function getResponseField(callback)  {
    //gets JSON array from the servlet, stores it in Javascript's array

    callback(responseField);
}

function drawFieldJSON(responseField)  {
    //makes appropriate changes to document's divs, depending on the reponse array
}

Я хочу иметь возможность обновлять состояние игры в цикле в Javascript, что-то вроде этого:

var timerId = setInterval(updateState, 1000);  //update game's state every second
setTimeout(function() {  //do it for 5 seconds
  clearInterval(timerId);
  alert( 'стоп' );
}, 5000);

Однакоигра на самом деле не меняется, потому что это новый запрос к сервлету каждый раз, и каждый раз создается новый экземпляр Game.Я не уверен, как изменить это, чтобы заставить это работать или если это вообще возможно.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Хранить игровой объект в сеансе и для каждого запроса получать игровой объект из сеанса.Так что он будет увеличиваться для каждого запроса

0 голосов
/ 01 марта 2019

Сделать объект Game статическим в классе сервлета Game game = new Game(15); Статические поля в serlvet будут жить не только во всех сеансах и запросах, но и во всем приложении, в этом случае, пока веб-приложение не будет развернуто.

пожалуйстапопробуйте, если у вас возникнут какие-либо проблемы или вам понадобится какое-либо обновление, пожалуйста, прокомментируйте, я обновлю код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...