Skip to content
FortyClock edited this page Feb 26, 2025 · 15 revisions

Добро пожаловать на crm-server wiki!

О проекте

Данный проект является совместной работой студентов в рамках производственной практики. Было разработано два микросервиса, которые взаимодействуют друг с другом. Первый - клиентская часть, второй - сервер. Клиент представляет собой графический интерфейс, в котором пользователь может управлять абстрактным роботом на карте из клеток 10x10. В приложении имеется возможность управлять его перемещением, поворотм, стрельбой и починкой его частей, а так же отслеживать состояние всех компонентов. При каждом взаимодействии пользователя с интерфейсом, приложение отправляет запрос на сервер по протоколу HTTP. Сервер в свою очередь обрабатывает эти запросы. Если пользователь вносит какие-либо изменения в состояние робота, он получает данную информацию, пропускает ее через алгоритмы, фиксирует изменения в конфигурационном файле и отправляет ответ, от которого зависит отображение актуальной информации о состоянии робота.

Сервер

Технологии

  1. Drogon framework - используется для работы с HTTP-запросами
  2. Docker - сборка сервера в контейнер для его запуска
  3. Google Test - модульное тестирование
  4. HTTP - протокол соединения между сервером и клиентом
  5. Языка программирования: C++

Функционал

В данном блоке расмотрим отдельные функции, которые отвечают за обработку запросов, алгоритмы перемещения, стрельбы, починки и т.д.

ActionController

Контроллер, который отвечает за post-запросы по url /repair и /shoot. Контроллеры отвечают за возможность починить элементы робота и стрельбы соответсвенно.


Для того чтобы сделать выстрел клиент должен отправить запрос в формате JSON с координатами позиции по которому идет огонь: {"x" : 3,"y" : 3}.


Для починки элемента принимается JSON с id элемента, который пользователь хочет починить.

  • {"id" : "right_leg_001"} - правая нога
  • {"id" : "torso_001"} - торс
  • {"id" : "left_leg_001"} - левая нога
  • {"id" : "gun_manip_001"} - орудийный манипулятор
  • {"id" : "gun_001"} - пушка
  • {"id" : "grab_manip_001"} - схватовый манипулятор

MapController

Контроллер отечает за get-запросы по url /map. Сервер отправляет клиенту JSON-файл с актуальной картой, где отображены враги и положение робота.

Clone this wiki locally