Протокол команд сервера - gogafefe/StAlGoLM GitHub Wiki

Протокол команд сервера

Формат сообщения

Сервер принимает обычный TCP-поток байт. Одна команда — одна текстовая строка, за которой обязательно следует байт-разделитель 0x01 — без него сервер не поймёт, что сообщение закончилось (подробнее — в Архитектура).

При подключении сервер сразу присылает приветствие:

Hello, World!!! I am echo server!

Аккаунт

Команда Что делает
reg <login> <password> <email> [role] Регистрация. role необязателен (по умолчанию user); допустимые роли: user, moderator, admin
auth <login> <password> Вход. Ответ — auth+ <role> или auth-
logout Выход из аккаунта на этом соединении
whoami Показать логин/email/роль текущего пользователя
del [login] Удалить аккаунт. Без аргумента — свой; с аргументом — только у admin
role <login> <newRole> Сменить роль пользователю (только admin)
users Список всех пользователей (moderator/admin)
stats Общая статистика сервера (moderator/admin)

Задания (нужен вход в аккаунт)

Команда Что генерирует
task1 <1-40> Сравнение методов трапеций и Симпсона
task2 <1-10> Метод Ньютона — выбор верного x₁ из 4 вариантов (вариант №6, см. Task2 — метод Ньютона)
task3 <1-10> Метод половинного деления — выбор приближённого корня из 4 вариантов (вариант №3, см. Task3 — метод половинного деления)
task4 <1-40> Сумма двух чисел (большие)
mystats [1-4] Личная статистика — по одному заданию или по всем

Как отвечать: после taskN <номер> следующим сообщением отправляется просто число — ответ.

  • task1: 1 (трапеции точнее) или 2 (Симпсон точнее)
  • task2: номер (1–4) правильного варианта x₁
  • task3: номер (1–4) верного приближённого корня
  • task4: посчитанная сумма

За верный ответ — +1 к статистике, за неверный — -1.

Пример сеанса

> reg fedor pass123 [email protected]
< reg+
> auth fedor pass123
< auth+ user
> task2 1
< === Задание Task2 (вариант №6 из списка) #1 ===
  f(x) = 1*x^2 + 7*x + 7
  x0 = 1.0000
  f(x0) = 15.0000
  f'(x0) = 9.0000
  Метод Ньютона: x1 = x0 - f(x0)/f'(x0)
  Какое из значений x1 правильное?
  1) x1 = -0.6667
  2) x1 = 2.6667
  3) x1 = 1.6667
  4) x1 = 0.4000
> 1
< Верно! StatisticTask2[1] += 1 (текущее значение: 0)
⚠️ **GitHub.com Fallback** ⚠️