Для просмотра приложения без сборки, доступна версия размещенная на сервисе Render: https://tic-tac-toe-v8dv.onrender.com
(Может быть периодически отключена, согласно правилам сервиса)
Server-side крестики-нолики, ключевые особенности:
- При запросу на новую игру, на сервере создается новый идентификатор сессии.
- Состояние игры храниться на сервере, от клиента запрашивается только данные, необходимые для следующего хода.
- Разметка создаваемая на сервере пред заполнена скрытой в форме информацией для формирования следующего хода.
- В случае ошибок, из которых можно восстановиться, сервер отправляет последнее актуальное состояние.
- Если произошла ошибка, из которой восстановиться нельзя (ошибка парсинг запроса, идентификатор удален / изменен в форме) - сервер отправляет новую игру.
- Параллельно с сервисом запускается сборщик устаревших сессий: раз в 15 минут он удаляет все сессии, от которых не приходило обновление более 30 минут.
cabal update
cabal run
Для входа в среду разработки:
nix develop
Для сборки и запуска проекта:
nix build
nix run
Для сборки контейнера:
docker build -t tic-tac-toe-server .
Для запуска контейнера:
docker run -it -p 8080:8080 --rm tic-tac-toe-server
После запуска сервиса одним из выше перечисленных способов,
игру можно будет открыть локально в браузере по адресу:
localhost:8080
./app/Main.hs
- Запускает приложение и сборщик истекших сессий../src/Types.hs
- Общие для остальных модулей типы и функции над ними../src/Server.hs
- Servant приложение, обрабатывающие запросы от игрока../src/Game.hs
- Модуль с игровой логикой../src/View.hs
- Создание HTML разметки из состояния игры../src/SessionManager
- Сборщик неактивных сессий, фильтрует хранимые сессии по времени последней активности../src/Data/Text/Extended.hs
- Модуль-расширение библиотеки text../src/Control/Monad/Logger/Extended.hs
- Модуль-расширение библиотеки monad-logger../test/Spec.hs
- Тесты основной игровой логики../static/index.html
- Шаблон, отправляемый при запросе к корневому url.
Локальная сборка проекта проверялась с версий cabal-install 3.10.2.1
и ghc 9.4.8
.
Сборка проекта тестировалась с haskell-ci workflow для версий ghc 9.6.2 | 9.4.4 | 9.2.8
.