-
Notifications
You must be signed in to change notification settings - Fork 0
Архитектура
Исходный код приложения представлен следующим набором классов:
- Application
- Server
- Client
- ClientInfoStorage
Так же имеется несколько файлов, в которых описаны различные вспомогательные функции и определения:
- Utils
- Defines
- Netextract
Класс, который отвечает за запуск приложения. На данный момент в нём нет практически никакой функциональности, однако в нём планируется организовать парсинг аргументов командной строки, а так же функциональность, которая не относится непосредственно к серверной части. Внутри этого класса создаётся объект класса Server - большая часть функциональность приложения сосредаточено в нём.
Основной класс, обеспечивающий открытие порта и приём входящих соединений. Внутри него хранится ассоциативный массив клиентов, каждый раз при подключении нового клиента он размещается в этом массиве. Так же в сервере реализован метод, отвечающий за проверку связи с клиентами (отправляющий пинг запросы), и некоторые вспомогательные функции, возвращающие информацию, которой обладает сервер и которую по смыслу лучше реализовать здесь. Это функция, возвращающая список клиентов в специальном формате, функция возвращающая клиента по его id, функция пересылающая список клиентов администраторам, и некоторые другие.
Класс, в котором сосредоточена информация о клиенте, а так же различные методы, касающиеся обработки данных, приходящих по сети этому клиенту. Клиент может быть неавторизованным клиентом, обычным клиентом или администратором. Среди основных методов, которые расположены в классе Client - функция отправки данных этому клиенту, функция обработки входящих данных, набор функция для парсинга команд протокола различного типа.
Класс, обеспечивающий хранение информации о клиентах. Вся информация о клиентах сохраняется в файл, и затем загружается при новом запуске сервера. В этом классе есть методы загрузки и сохранения, а так же различные методы по добавлению и извлечению информации об одном клиенте.
В этом файле размещено несколько шаблонных функций для сериализации и десериализации различных типов. Т. е. для преобразования, к примеру, числа типа int в список из четырёх байт QByteArray. Функции сделаны шаблонными для того, чтобы они могли работать с различными типами (qint18, qint32, и т. п.).
Здесь размещены основные определения. Это константы протоколов, пути к файлам, время через которое отключаются неактивные клиенты, и прочие константы.
Тут находятся функции для извлечения необходимых данных из пришедшего пакета. Например, getClientOs - принимает на вход массив байт QByteArray (пришедшая по сети команда) - и возвращает операционную систему в виде строки QString.