Клиент - gogafefe/StAlGoLM GitHub Wiki

Оконный клиент

Клиент — это Qt-приложение с окном (Qt Widgets), которое делает ровно то же, что и работа через PuTTY, только кнопками: подключается к серверу по TCP, отправляет команды протокола и показывает ответы.

Запуск

  1. Открой в Qt Creator сервер (StAlGoLM.pro) и запусти его (▶) — в консоли появится «server is started».
  2. Открой клиент (client/Client.pro) — Qt Creator добавит его вторым проектом в тот же сеанс. В переключателе запуска (слева внизу) выбери проект Client и нажми ▶.
  3. Клиент сразу подключается к localhost:33333. Если сервер ещё не запущен — в журнале появится ошибка; запусти сервер и нажми «Подключиться».

Что умеет

  • Подключение — хост/порт задаются в окне, при запуске подключается сам.
  • Аккаунт — регистрация (reg), вход (auth), выход (logout), whoami.
  • Задания — выбор task1–task4 и номера шаблона (у task2 диапазон 1–10 подставляется сам), кнопка «Получить задание».
  • Ответ — для task2 варианты ответа показываются радиокнопками, и их текст подставляется из ответа сервера (строки «1) x1 = …»); для task1/task3/task4 — числовое поле. Кнопка «Отправить ответ» шлёт номер варианта или сумму.
  • mystats — личная статистика по всем заданиям.
  • Журнал — всё, что клиент отправил и получил, с пометками [я] и [сервер].

Как устроен код

Файл Назначение
Client.pro Сборочный файл: QT += core gui network widgets
main.cpp QApplication + показ главного окна
mainwindow.h/.cpp Всё окно: виджеты, слоты кнопок, QTcpSocket

Работа с сетью — тот же протокол, что и у PuTTY-клиента: команда текстом, в конце байт-разделитель 0x01 (socket->write(command.toUtf8() + '\x01')). Входящие байты читаются в onReadyRead() и попадают в журнал; из текста задания task2 регулярным выражением вытаскиваются варианты ответа.

Состояние приложения (подключён ли, залогинен ли, какое задание активно) хранится в полях окна; интерфейс подстраивается: пока задание не получено, поле ответа и радиокнопки заблокированы.