Добро пожаловать в репозиторий P2P Snake Node! Это проект узла P2P-игры змейка, реализующего взаимодействие с другими узлами предоставляющего и предоставляющего UDP API
- Golang 1.20
- Protocol Buffers 2
- Logrus
- Viper
Узел состоит из нескольких компонентов:
- Парсер командной строки
- Парсер конфигурационного файла
- Логгер
- Игровой движок
- P2P узел
- API сервер
- Детектор копий
Доступны 2 флага:
--config
- указывает путь к конфигурационному файлу (в случае отсутствия, ожидается конфигурационный файл config/config.json)-v
- определяет будет ли узел виден (будет ли работать детектор копий)
Ожидается следующий формат:
{
"p2p": {
"delay": 1000,
"multicast": {
"address": "239.192.0.4",
"port": 9192
}
},
"api": {
"public_url": "192.168.3.43:9193",
"port": 9193,
"timeout": 1000
},
"hub": {
"multicast": {
"address": "239.192.0.5",
"port": 9194
}
}
}
Пример логов:
2023-12-24 23:41:31.550 INFO --- /p2p-snake/cmd/p2p-snake/main.go:33 : to quit application press Ctrl+C
2023-12-24 23:41:31.550 INFO --- /p2p-snake/internal/api/server.go:74 : API server is listening on :9196
2023-12-24 23:41:31.550 INFO --- /p2p-snake/internal/p2p/peer.go:71 : P2P node is listening on multicast 239.192.0.4:9192
2023-12-24 23:41:31.550 INFO --- /p2p-snake/internal/p2p/peer.go:79 : P2P node is listening on unicast [::]:45322
2023-12-24 23:41:31.551 INFO --- /p2p-snake/internal/hub/sender.go:55 : hub sender running on [::]:60610
- Содержит данные игры: змеек, игроков, координаты пищи
- Реализует логику игры: вычисление следующего состояния, добавление змеек и еды, проверка змеек на поедание пищи и на столкновение как с самой собой, так и с другими змейками
Отвечает за общение с другими P2P-узлами, реализует протокол общения узлов (подробное описание протокола, protobuf файл протокола)
Предоставление UDP API для клиентов, поддержание "соединения" с клиентом, делегирование запросов клиентов p2p-узлу (protobuf файл протокола)
В случае установленного флага -v
будет отправляться сообщение на мультикаст адрес хаба, который
могут прослушивать не имеющие своего узла клиенты в поисках свободного. Как только какой-нибудь
клиент "соединяется" с узлом, сообщения перестают
отправляться (protobuf файл протокола)
-
Убедитесь, что у вас установлен Golang 1.20;
-
Клонируйте репозиторий на свою локальную машину;
-
Запустите приложение с помощью команды:
make build ./p2p-snake-node -v -config <CONFIG_PATH>
-
Убедитесь, что у вас установлен Docker;
-
Запустите контейнер с помощью команды:
sudo docker run \ -d \ -v ./config.json:/config.json \ -e CONFIG_FILE=/config.json \ --network host \ --name p2p-snake-node \ ptrvsrg/p2p-snake-node:latest
Если вы хотите внести свой вклад в проект, вы можете следовать этим шагам:
- Создайте форк этого репозитория.
- Внесите необходимые изменения.
- Создайте pull request, описывая ваши изменения.