Запустить сервер:
docker-compose up --build -d
Запустить клиент:
make build && make run
Детали:
- Сессия игры начинается, когда к серверу подключатся 4 клиента.
- Роли выдаются рандомно.
- Сервер может одновременно обслуживать много сессий игры.
- При подключении необходимо ввести имя(любая строка до '\n').
- В первый игровой день игроки могут либо "лечь спать", либо обмениваться сообщениями.
- В первую ночь комиссар и мафия выбирают цель. Сразу после выбора цели, наступает день.
- Днем раскрывается жертва мафии.
- Днем комиссар по желанию может опубликовать данные проверенного игрока.
- Днем голосованием выбирают мафию, а результаты голосования становятся известны сразу после того как все будут готовы к ночи.
- Если голосованием удалось убить мафию или если мафия осталась 1 на 1 с мирным жителем, то игра прекращается и объявляются результаты.
- После объявления результатов сессия завершается. Для новой сессии нужно повторно подключить к серверу.
Технические детали: Клиент на сервер отправляет "действия", а сервер может рассылать уведомлений клиентам. Общение построено вокруг двунаправленного стрима.
Типы действия, которые порождает клиент:
- Инициализация нового игрока;
- Голосование за мафию;
- Проверка роли(для комиссара);
- Публикация роли(для комиссара);
- Убийство(для мафии);
- Отправка сообщения;
- Выход из игры(CTRL+C);
- "Завершить дневную активность".
Типы уведомлений которые присылает сервер:
- Подключение нового клиента;
- Начало игры;
- О голосовании(кто за кого проголосовал);
- Результаты голосования;
- Отключение из игры;
- Конец игровой сессии.
Для обмена сообщениями используется RabbitMQ: каждый клиент создает свою очередь, очереди объединяет fanout exchange декларируемый по session_id, т.е. любое сообщение попавшее в брокер, будет разослано всем участникам одной сессии.