-
Notifications
You must be signed in to change notification settings - Fork 0
Homework #4
-
Добавить еще один абонент и поток - GameMechanics.
-
Добавить адрес этого абонента в AddressService.
-
Написать абстрактное сообщение MsgToGM и реализацию - MsgStartGameSession.
-
Frontend должен посылать сообщение MsgStartGameSession на GameMechanics в тот момент, когда к серверу присоединилось достаточно пользователей для старта новой игры (например, 2 пользователя для игры в шахматы). Получив это сообщение, игровая механика должна создать игровую сессию для пользователей, Id которых пришли в сообщении. (см Собственное расширение п. 4)
-
Написать сообщение на Frontend, и пересылать в нем из GameMechanics реплику состояния игровой сессии каждые 100ms (пока достаточно реализовать через Thread.sleep(100)).
-
Для проверки работы пересылки сообщений при старте игровой сессии запоминать время старта, пересылать из игровой механики текущую длительность игровой партии и показывать ее на странице.
Получать текущее время в миллисекундах можно так:
Date date = new Date();
long currentTime = date.getTime();
в методе run() после обработки сообщений, для каждой игровой сессии вычислять время прошедшее с ее начала и отправлять обновление на Frontend.
-
Для упрощения решения задания на на данном этапе принимаются следующие ограничения:
Сервер может создать только один сеанс игры для мининимально необходимого количества игроков. После создания игровой сессии другие пользователи могут авторизоваться, но принимать участия в игре не могут.
В качестве оппонентов для игры выбираются "первые попавшиеся" зарегистрировавшиеся пользователи.
-
На сервере:
Оппоненты выбираются объектом
GameFrontendИгровая механика после получения сообщения
startGameсоздает игровую сессию. Игровая сессия реализуется классомGameSession.В Игровой механике с переодичностью в 100 мс для класса, реализующего интерфейс
Frontend, отсылается сообщение, содерждащие объектGameData. ОбъектGameDataсодержит текущее состояние игровой сессии и для текущего задания содержит только одно свойство: время, прошедшее с начала игры.В классе
GameFrontendимеется полеgameData, значение которого обновляется с приходом очередного сообщения от Игровой механики. -
На клиенте:
Создать страницу, которая будет отдаваться после регистрации пользователя. На странице отобразить учетные данные пользователя, необходимое количество пользователей для начала игры и имена оппонентов. Игра начинается при нажатии кнопки "Начать игру". Если количество пользователей не достаточно, то на странице выводиться сообщение об этом и идет дальнейшее ожидание кворума.