Skip to content

Архитектура

exileed edited this page Sep 24, 2012 · 1 revision

Исходный код приложения представлен следующим набором классов:

  • Application
  • Server
  • Client
  • ClientInfoStorage

Так же имеется несколько файлов, в которых описаны различные вспомогательные функции и определения:

  • Utils
  • Defines
  • Netextract

Описание классов

Application

Класс, который отвечает за запуск приложения. На данный момент в нём нет практически никакой функциональности, однако в нём планируется организовать парсинг аргументов командной строки, а так же функциональность, которая не относится непосредственно к серверной части. Внутри этого класса создаётся объект класса Server - большая часть функциональность приложения сосредаточено в нём.

Server

Основной класс, обеспечивающий открытие порта и приём входящих соединений. Внутри него хранится ассоциативный массив клиентов, каждый раз при подключении нового клиента он размещается в этом массиве. Так же в сервере реализован метод, отвечающий за проверку связи с клиентами (отправляющий пинг запросы), и некоторые вспомогательные функции, возвращающие информацию, которой обладает сервер и которую по смыслу лучше реализовать здесь. Это функция, возвращающая список клиентов в специальном формате, функция возвращающая клиента по его id, функция пересылающая список клиентов администраторам, и некоторые другие.

Client

Класс, в котором сосредоточена информация о клиенте, а так же различные методы, касающиеся обработки данных, приходящих по сети этому клиенту. Клиент может быть неавторизованным клиентом, обычным клиентом или администратором. Среди основных методов, которые расположены в классе Client - функция отправки данных этому клиенту, функция обработки входящих данных, набор функция для парсинга команд протокола различного типа.

ClientInfoStorage

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

Описание файлов

Utils

В этом файле размещено несколько шаблонных функций для сериализации и десериализации различных типов. Т. е. для преобразования, к примеру, числа типа int в список из четырёх байт QByteArray. Функции сделаны шаблонными для того, чтобы они могли работать с различными типами (qint18, qint32, и т. п.).

Defines

Здесь размещены основные определения. Это константы протоколов, пути к файлам, время через которое отключаются неактивные клиенты, и прочие константы.

Netextract

Тут находятся функции для извлечения необходимых данных из пришедшего пакета. Например, getClientOs - принимает на вход массив байт QByteArray (пришедшая по сети команда) - и возвращает операционную систему в виде строки QString.