Skip to content

Nester0v474/game-server-backend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Game Server Backend

Backend сервер для многопользовательской онлайн-игры с поддержкой одновременных подключений, обработкой коллизий и интеграцией с базой данных PostgreSQL.

Описание

Многопользовательский игровой сервер, разработанный на C++17, который обрабатывает одновременные подключения множества игроков, обрабатывает коллизии объектов в реальном времени, ведет подсчет очков и сохраняет статистику игроков в базе данных PostgreSQL.

Функциональность

  • Многопользовательская игра с поддержкой множества одновременных подключений
  • Обработка коллизий объектов в реальном времени
  • Система подсчета очков и статистики игроков
  • Интеграция с PostgreSQL для хранения данных
  • HTTP API для взаимодействия с клиентскими приложениями
  • Система пулов соединений для оптимизации работы с БД
  • Автоматический выход игроков на пенсию по истечении времени

Технологии

  • C++17 - основной язык программирования
  • Boost.Asio - асинхронное сетевое программирование
  • PostgreSQL (pqxx) - работа с базой данных
  • HTTP сервер - обработка HTTP запросов
  • Многопоточность - std::thread, std::jthread для параллельной обработки
  • Система пулов соединений - оптимизация работы с БД
  • JSON парсинг - boost::json для обработки данных
  • Docker - контейнеризация приложения
  • CMake и Conan - система сборки и управления зависимостями

Структура проекта

solution/
├── src/
│   ├── main.cpp              # Точка входа, инициализация сервера
│   ├── application.h/cpp      # Основная логика приложения
│   ├── request_handler.h/cpp  # Обработка HTTP запросов
│   ├── model.h/cpp            # Игровые модели (Game, Map, Player, Dog)
│   ├── collision_detector.h/cpp # Обработка коллизий
│   ├── json_loader.h/cpp      # Загрузка конфигурации из JSON
│   └── database.h/cpp         # Работа с PostgreSQL
├── data/
│   └── config.json            # Конфигурация игры
├── CMakeLists.txt             # Конфигурация сборки
├── conanfile.txt              # Зависимости Conan
└── Dockerfile                 # Docker конфигурация

Требования

  • Компилятор с поддержкой C++17
  • Boost библиотеки (Asio, JSON)
  • PostgreSQL клиентская библиотека (pqxx)
  • CMake 3.10+
  • Conan (для управления зависимостями)
  • Docker (опционально, для контейнеризации)

Сборка

Установка зависимостей

# Установите Conan
pip install conan

# Создайте профиль Conan
conan profile detect --force

# Установите зависимости
conan install . --output-folder=build --build=missing

Компиляция

mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=../build/conan_toolchain.cmake
cmake --build .

Конфигурация

Переменные окружения

export GAME_DB_URL="postgresql://user:password@localhost:5432/gamedb"

Конфигурационный файл (data/config.json)

{
  "maps": [
    {
      "id": "map1",
      "name": "Map 1",
      "roads": [...],
      "buildings": [...],
      "offices": [...]
    }
  ],
  "dogRetirementTime": 60.0
}

Запуск

Локальный запуск

./game_server \
  --config-file data/config.json \
  --www-root static \
  --tick-period 1000

Запуск в Docker

docker build -t game-server .
docker run -p 8080:8080 \
  -e GAME_DB_URL="postgresql://user:pass@host:5432/db" \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/static:/app/static \
  game-server

API Endpoints

POST /api/v1/game/join

Присоединение игрока к игре.

Request:

{
  "userName": "Player1",
  "mapId": "map1"
}

Response:

{
  "authToken": "token123",
  "playerId": "player-id-123"
}

GET /api/v1/game/players

Получение списка игроков.

Headers:

Authorization: Bearer <authToken>

POST /api/v1/game/player/action

Отправка действия игрока.

Request:

{
  "move": "U"
}

GET /api/v1/game/state

Получение текущего состояния игры.

POST /api/v1/game/tick

Ручной тик игры (если не используется автоматический).

Особенности реализации

  • Асинхронная обработка: использование Boost.Asio для неблокирующих операций
  • Пул соединений: оптимизация работы с БД через пул соединений
  • Обработка коллизий: эффективный алгоритм определения столкновений
  • Многопоточность: параллельная обработка запросов от множества клиентов
  • Автоматический тик: опциональная автоматическая обработка игрового цикла

Эволюция проекта

  • Версия 1: Базовая структура проекта, настройка сборки
  • Версия 2: Добавлена веб-часть и статические файлы для фронтенда
  • Версия 3: Добавлена система подсчета очков и обработка игровой логики
  • Версия 4 (текущая): Интеграция с PostgreSQL, пул соединений, обработка коллизий, система выхода игроков на пенсию

Автор

Михаил Нестеров

Лицензия

Этот проект создан в образовательных целях.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages