{"id":26506310,"url":"https://github.com/ptrvsrg/p2p-snake-node","last_synced_at":"2025-03-20T22:26:44.232Z","repository":{"id":208777119,"uuid":"722444803","full_name":"ptrvsrg/p2p-snake-node","owner":"ptrvsrg","description":"Многопользовательская игра Змейка с использованием протокола peer-to-peer с сообщениями формата Protobuf","archived":false,"fork":false,"pushed_at":"2024-01-07T11:06:36.000Z","size":134,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-01-07T12:26:22.785Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ptrvsrg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-11-23T06:56:27.000Z","updated_at":"2023-12-24T17:17:30.000Z","dependencies_parsed_at":"2023-11-23T09:22:17.039Z","dependency_job_id":"2af83967-c29e-4293-9a51-4803fb320024","html_url":"https://github.com/ptrvsrg/p2p-snake-node","commit_stats":null,"previous_names":["ptrvsrg/p2p-snake","ptrvsrg/p2p-snake-node"],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrvsrg%2Fp2p-snake-node","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrvsrg%2Fp2p-snake-node/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrvsrg%2Fp2p-snake-node/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ptrvsrg%2Fp2p-snake-node/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ptrvsrg","download_url":"https://codeload.github.com/ptrvsrg/p2p-snake-node/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244702476,"owners_count":20495915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-03-20T22:26:43.629Z","updated_at":"2025-03-20T22:26:44.224Z","avatar_url":"https://github.com/ptrvsrg.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Узел P2P-игры \"Змейка\"\n\n\u003cp align=\"center\"\u003e\n   \u003ca href=\"https://github.com/ptrvsrg/p2p-snake-node/graphs/contributors\"\u003e\n        \u003cimg alt=\"GitHub contributors\" src=\"https://img.shields.io/github/contributors/ptrvsrg/p2p-snake-node?style=flat\u0026label=Contributors\u0026labelColor=222222\u0026color=77D4FC\"/\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/ptrvsrg/p2p-snake-node/forks\"\u003e\n        \u003cimg alt=\"GitHub forks\" src=\"https://img.shields.io/github/forks/ptrvsrg/p2p-snake-node?style=flat\u0026label=Forks\u0026labelColor=222222\u0026color=77D4FC\"/\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/ptrvsrg/p2p-snake-node/stargazers\"\u003e\n        \u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/ptrvsrg/p2p-snake-node?style=flat\u0026label=Stars\u0026labelColor=222222\u0026color=77D4FC\"/\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/ptrvsrg/p2p-snake-node/issues\"\u003e\n        \u003cimg alt=\"GitHub issues\" src=\"https://img.shields.io/github/issues/ptrvsrg/p2p-snake-node?style=flat\u0026label=Issues\u0026labelColor=222222\u0026color=77D4FC\"/\u003e\n   \u003c/a\u003e\n   \u003ca href=\"https://github.com/ptrvsrg/p2p-snake-node/pulls\"\u003e\n        \u003cimg alt=\"GitHub pull requests\" src=\"https://img.shields.io/github/issues-pr/ptrvsrg/p2p-snake-node?style=flat\u0026label=Pull%20Requests\u0026labelColor=222222\u0026color=77D4FC\"/\u003e\n   \u003c/a\u003e\n\u003c/p\u003e\n\nДобро пожаловать в репозиторий P2P Snake Node! Это проект узла P2P-игры змейка, реализующего\nвзаимодействие с другими узлами предоставляющего и предоставляющего UDP API\n\n## Технологии\n\n- Golang 1.20\n- Protocol Buffers 2\n- Logrus\n- Viper\n\n## Описание\n\nУзел состоит из нескольких компонентов:\n\n- [Парсер командной строки](./internal/clparser)\n- [Парсер конфигурационного файла](./internal/config)\n- [Логгер](./internal/log)\n- [Игровой движок](./internal/engine)\n- [P2P узел](./internal/p2p)\n- [API сервер](./internal/api)\n- [Детектор копий](./internal/hub)\n\n### Парсер командной строки\n\nДоступны 2 флага:\n\n- `--config` - указывает путь к конфигурационному файлу (в случае отсутствия, ожидается\n  конфигурационный файл config/config.json)\n- `-v` - определяет будет ли узел виден (будет ли работать детектор копий)\n\n### Парсер конфигурационного файла\n\nОжидается следующий формат:\n\n```json\n{\n    \"p2p\": {\n        \"delay\": 1000,\n        \"multicast\": {\n            \"address\": \"239.192.0.4\",\n            \"port\": 9192\n        }\n    },\n    \"api\": {\n        \"public_url\": \"192.168.3.43:9193\",\n        \"port\": 9193,\n        \"timeout\": 1000\n    },\n    \"hub\": {\n        \"multicast\": {\n            \"address\": \"239.192.0.5\",\n            \"port\": 9194\n        }\n    }\n}\n```\n\n### Логгер\n\nПример логов:\n\n```text\n2023-12-24 23:41:31.550  INFO --- /p2p-snake/cmd/p2p-snake/main.go:33 : to quit application press Ctrl+C \n2023-12-24 23:41:31.550  INFO --- /p2p-snake/internal/api/server.go:74 : API server is listening on :9196 \n2023-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 \n2023-12-24 23:41:31.550  INFO --- /p2p-snake/internal/p2p/peer.go:79 : P2P node is listening on unicast [::]:45322 \n2023-12-24 23:41:31.551  INFO --- /p2p-snake/internal/hub/sender.go:55 : hub sender running on [::]:60610 \n```\n\n### Игровой движок\n\n- Содержит данные игры: змеек, игроков, координаты пищи\n- Реализует логику игры: вычисление следующего состояния, добавление змеек и еды, проверка змеек на\n  поедание пищи и на столкновение как с самой собой, так и с другими змейками\n\n### P2P узел\n\nОтвечает за общение с другими P2P-узлами, реализует протокол общения узлов ([подробное описание\nпротокола](./docs/TASK.md), [protobuf файл протокола](./protocol/p2p.proto))\n\n### API сервер\n\nПредоставление UDP API для клиентов, поддержание \"соединения\" с клиентом, делегирование запросов\nклиентов p2p-узлу ([protobuf файл протокола](./protocol/api.proto))\n\n### Детектор копий\n\nВ случае установленного флага `-v` будет отправляться сообщение на мультикаст адрес хаба, который\nмогут прослушивать не имеющие своего узла клиенты в поисках свободного. Как только какой-нибудь\nклиент \"соединяется\" с узлом, сообщения перестают\nотправляться ([protobuf файл протокола](./protocol/hub.proto))\n\n## Установка и настройка\n\n### Вручную\n\n1. Убедитесь, что у вас установлен Golang 1.20;\n2. Клонируйте репозиторий на свою локальную машину;\n3. Запустите приложение с помощью команды:\n\n   ```shell\n   make build\n   ./p2p-snake-node -v -config \u003cCONFIG_PATH\u003e\n   ```\n   \n### Docker\n\n1. Убедитесь, что у вас установлен Docker;\n2. Запустите контейнер с помощью команды:\n\n    ```shell\n    sudo docker run \\\n    -d \\\n    -v ./config.json:/config.json \\\n    -e CONFIG_FILE=/config.json \\\n    --network host \\\n    --name p2p-snake-node \\\n    ptrvsrg/p2p-snake-node:latest\n    ```\n\n## Вклад в проект\n\nЕсли вы хотите внести свой вклад в проект, вы можете следовать этим шагам:\n\n1. Создайте форк этого репозитория.\n2. Внесите необходимые изменения.\n3. Создайте pull request, описывая ваши изменения.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fptrvsrg%2Fp2p-snake-node","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fptrvsrg%2Fp2p-snake-node","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fptrvsrg%2Fp2p-snake-node/lists"}