7 Разработка игрового веб-сервера на Java. Игровая механика










































































Тест

Отметьте верные утверждения о UserSession:
  • содержит результаты ранее сыгранных партий
  • содержит данные, на основе которых можно построить страницу для пользователя
  • содержит данные обо всех участниках игровой партии
  • каждый объект GameSession "живет" в своем потоке

Задачи DatabaseService:
  • передача сообщений
  • запросы к базам данных
  • создание потоков новых
  • аутентификация пользователя по имени
  • обработка (handle(...)) вызовов из Jetty
  • расчет игровых событий
  • создание страницы для пользователя
  • работа с файловой системой
  • проверка активности пользователя (удаление сессии не активных пользователей)

Циклические зависимости в Java это:
  • ссылка класса одного пакета на класс другого пакета
  • ссылка класса на самого себя
  • ссылка класса А на класс В одновременно со ссылкой класса В на класс А если классы в разных пакетах
  • ссылка класса первого пакета на класс второго пакета одновременно со ссылкой любого класса из второго пакета на любой класс первого
  • ссылка класса А на класс В одновременно со ссылкой класса В на класс А

Может ли класс из пакета unils зависеть от пакета base?
  • нет
  • да
  • да, только если у base нет зависимостей от unils

Реплика на Frontend это:
  • данные которые DatabaseService пересылает на Frontend после аутентификации пользователя
  • сообщения с командами на GM которые посылает Frontend из метода handle(...)
  • сообщение с данными о пользователях на основе которых можно создать страницы с текущим состоянием игры

Задачи MessageSystem:
  • создание потоков новых
  • проверка активности пользователя (удаление сессии не активных пользователей)
  • обработка (handle(...)) вызовов из Jetty
  • работа с файловой системой
  • аутентификация пользователя по имени
  • запросы к базам данных
  • передача сообщений
  • расчет игровых событий
  • создание страницы для пользователя

Можно ли создать в Java интерфейс без методов?
  • нет
  • да, это элемент некоторых архитектурных решений
  • да, но такой интерфейс бесполезен

Отметьте верные утверждения о GameSession:
  • каждый объект GameSession "живет" в своем потоке
  • содержит результаты ранее сыгранных партий
  • содержит данные на основе которых можно построить страницу для пользователя
  • содержит данные обо всех участниках игровой партии

Самостоятельная работа

Расширить приложение из Практической работы 2. Добавить еще один абонент и поток - GameMechanics.

Добавить адрес этого абонента в AddressService.

Написать абстрактное сообщение MsgToGM и реализацию - MsgStartGameSession.

Frontend должен посылать сообщение MsgStartGameSession на GameMechanics в тот момент, когда к серверу присоединилось достаточно пользователей для старта новой игры (например, 2 пользователя для игры в шахматы). Получив это сообщение, игровая механика должна создать игровую сессию для пользователей, Id которых пришли в сообщении.

Написать сообщение на Frontend, и пересылать в нем из GameMechanics реплику состояния игровой сессии каждые 100ms (пока достаточно реализовать через Thread.sleep(100)).

Для проверки работы пересылки сообщений при старте игровой сессии запоминать время старта, пересылать из игровой механики текущую длительность игровой партии и показывать ее на странице.

Получать текущее время в миллисекундах можно так:

Date date = new Date();
long currentTime = date.getTime();
в методе run() после обработки сообщений, для каждой игровой сессии вычислять время прошедшее с ее начала и отправлять обновление на Frontend.