#include <daemon.h>

Класс полностью включает в себя функциональность сервера чата.
| Daemon | ( | QObject * | parent = 0 |
) |
| void clientAccessGranted | ( | const QString & | network, | |
| const QString & | server, | |||
| quint16 | numeric | |||
| ) | [private, slot] |
Уведомление об успешном установлении связи с вышестоящим сервером.
Функция устанавливает номер вышестоящего сервера и добавляет его номер в список номеров.
| network | Параметр игнорируется и не используется. | |
| server | Параметр игнорируется и не используется. | |
| numeric | Номер вышестоящего сервера. |
| void clientServiceLeave | ( | bool | echo = true |
) | [private, slot] |
Обработка потери соединения с вышестоящим сервером.
Функция сбрасывает m_remoteNumeric, удаляет не существующие больше номера серверов из m_numerics и пользователей, которые были к ним подключены из m_users с рассылкой сигнала об отключении пользователя.
| echo | Параметр игнорируется и не используется. |
| void clientSyncUsers | ( | const QStringList & | list, | |
| quint8 | echo = 1, |
|||
| quint8 | numeric = 0 | |||
| ) | [private, slot] |
Синхронизация события подключения к удалённому серверу нового пользователя.
Слот вызывается при получении пакета OpcodeNewUser от локального клиентского подключения либо от удалённого сервера. Функция вносит нового пользователя в список m_users и высылает уведомление.
| list | Стандартный список, содержащий в себе полные данные пользователя. | |
| echo | Параметр игнорируется и не используется. | |
| numeric | Номер сервера, к которому подключен данный пользователь. |
| void clientSyncUsersEnd | ( | ) | [private, slot] |
Уведомление о завершении передачи списка пользователей от вышестоящего сервера.
Функция высылает в ответ список локальных пользователей.
| void clientUserLeave | ( | const QString & | nick, | |
| const QString & | bye, | |||
| quint8 | flag | |||
| ) | [private, slot] |
Синхронизация события отключения пользователя от удалённого сервера. Событие игнорируется если пользователь является локальным.
Функция устанавливает в профиле пользователя новое сообщение о выходе и вызывает функцию userLeave(const QString &nick).
| nick | Ник пользователя. | |
| bye | Сообщение о выходе. | |
| flag | Параметр игнорируется и не используется. |
| void detectZombie | ( | ) | [private, slot] |
| void greeting | ( | const QStringList & | list, | |
| quint8 | flag | |||
| ) | [private, slot] |
Обработка приветствия от подключенного клиента.
В зависимости от значения flag вызывается функция greetingLink(const QStringList &list, DaemonService *service) для сервера либо greetingUser(const QStringList &list, DaemonService *service) для клиента.
| list | Стандартный список, содержащий в себе полные данные пользователя. | |
| flag | Флаг подключения. |
| void greetingLink | ( | const QStringList & | list, | |
| DaemonService * | service | |||
| ) | [private] |
Обработка приветствия от удалённого сервера.
Для успешного подключения должны быть соблюдены следующие условия:
При успешном подключении сервис уведомляется об этом, также производится синхронизация номеров сети и пользователей. Функция устанавливает соединения сигнал/слот специфичные для данного типа соединения.
Факт подключения записывается в журнал.
| list | Стандартный список, содержащий в себе полные данные пользователя. | |
| service | Указатель на сервис. |
| void greetingUser | ( | const QStringList & | list, | |
| DaemonService * | service | |||
| ) | [private] |
Обработка приветствия от локально подключенного пользователя.
\
| list | Стандартный список, содержащий в себе полные данные пользователя. | |
| service | Указатель на сервис. |
| void incomingConnection | ( | ) | [private, slot] |
Обслуживание нового входящего соединения.
При наличии ожидающего соединения создаётся класс DaemonService получающий указатель на QTcpSocket. Функция также создаёт базовые соединения сигнал/слот, общие для клиентского и межсерверного соединения.
| bool initMotd | ( | ) | [private] |
Инициализирует поддержку команды /motd (Message Of The Day).
| bool initStats | ( | ) | [private] |
Инициализирует поддержку записи статистической информации.
| void link | ( | ) | [private] |
Инициализирует поддержку сети и при необходимости устанавливает соединение с вышестоящим сервером.
Для успешной инициализации сети необходимы следубщие условия
В случае ошибки m_network устанавливается в 0.
| void linkLeave | ( | const QString & | nick, | |
| const QString & | err | |||
| ) | [private] |
Обработка отключения нижестоящего сервера.
Сервер удаляется из списка подключенных серверов и его номер удаляется из списка номеров серверов. Высылается уведомление об отключении сервера, и отключаются все клиенты, ассоциированные с этим сервером. Событие записывается в журнал.
| nick | Номер сервера в виде строки. | |
| err | Ошибка, причина разъединения. |
| void linkLeave | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | ip | |||
| ) | [private, slot] |
Уведомление об отключении от удалённого сервера другого сервера.
Номер сервера удаляется из списка серверов и высылается соответствующие уведомление.
| numeric | Номер сервера подключившегося к сети. | |
| network | Название сети. | |
| ip | Адрес сервера |
| void logLinkLeave | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | name | |||
| ) | [private, slot] |
Запись в канальный журнал события отключения сервера.
| void logMessage | ( | const QString & | sender, | |
| const QString & | message | |||
| ) | [private, slot] |
Запись в канальный журнал сообщения в главный канал.
| void logNewLink | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | name | |||
| ) | [private, slot] |
Запись в канальный журнал события подключения сервера.
| void logNewUser | ( | const QStringList & | list, | |
| quint8 | echo = 1, |
|||
| quint8 | numeric = 0 | |||
| ) | [private, slot] |
Запись в журналы сервера события подключения нового пользователя.
| void message | ( | const QString & | channel, | |
| const QString & | nick, | |||
| const QString & | msg | |||
| ) | [private, slot] |
Обработка нового сообщения от локального пользователя.
Для всех сообщений проверяется наличие в них команды для сервера.
Если channel пустая строка, то это сообщение предназначено для отправки в главный канал. Происходит рассылка уведомление для локальных клиентов и остальных серверов, при необходимости добавляется запись в канальный лог.
Отправка приватных сообщений производится различными способами в зависимости от того к какому серверу подключен получатель. Получатель может быть:
| channel | Канал/ник для кого предназначено сообщение (пустая строка - главный канал). | |
| nick | Ник отправителя сообщения. | |
| msg | Сообщение. |
| void newLink | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | ip | |||
| ) | [private, slot] |
Уведомление о подключении к удалённому серверу другого сервера.
Номер нового сервера добавляется в список серверов и высылается уведомление о новом сервере.
| numeric | Номер сервера подключившегося к сети. | |
| network | Название сети. | |
| ip | Адрес сервера |
| bool parseCmd | ( | const QString & | nick, | |
| const QString & | msg | |||
| ) | [private] |
Обработка команд предназначенных для сервера.
| nick | Ник пользователя отправившего сообщение. | |
| msg | Сообщение. |
Команда "/server"
| void relayMessage | ( | const QString & | channel, | |
| const QString & | sender, | |||
| const QString & | msg | |||
| ) | [private, slot] |
Обработка сообщения пользователя полученного с другого сервера.
Если channel пустая строка, то это сообщение предназначено для отправки в главный канал. Происходит рассылка уведомление для локальных клиентов и остальных серверов, при необходимости добавляется запись в канальный лог.
Отправка приватных сообщений произовдится различными способами в зависимости от того к какому серверу подключен получатель. Получатель может быть:
| channel | Канал/ник для кого предназначено сообщение (пустая строка - главный канал). | |
| sender | Ник отправителся. | |
| msg | Cообщение. |
| void sendAllUsers | ( | DaemonService * | service | ) | [private] |
Отправка подключившемуся клиенту списка всех пользователей.
| void sendLinkLeave | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | ip | |||
| ) | [signal] |
Уведомление об отключении от данного сервера другого сервера.
| numeric | Номер сервера подключившегося к сети. | |
| network | Название сети. | |
| ip | Адрес сервера |
| void sendNewLink | ( | quint8 | numeric, | |
| const QString & | network, | |||
| const QString & | ip | |||
| ) | [signal] |
Уведомление о подключении к данному серверу другого сервера.
| numeric | Номер сервера подключившегося к сети. | |
| network | Название сети. | |
| ip | Адрес сервера |
| QString serverInfo | ( | ) | const [private] |
Возвращает html форматированную строку содержащую информацию о сервере.
| void serviceLeave | ( | const QString & | nick, | |
| quint8 | flag, | |||
| const QString & | err | |||
| ) | [private, slot] |
Обработка отключения авторизированного пользователя.
В зависимости от значения flag вызывается функция linkLeave(const QString &nick) для сервера либо userLeave(const QString &nick, const QString &err) для пользователей.
| nick | Ник пользователя. | |
| flag | Флаг подключения. | |
| err | Ошибка, причина разъединения. |
| bool start | ( | ) |
Запуск сервера.
Функция читает настройки сервера, устанавливает параметры логирования каналов и производит запуск сервера m_server. Данные о попытке запуска заносятся в лог файл.
| void syncBye | ( | const QString & | nick, | |
| const QString & | bye, | |||
| bool | local | |||
| ) | [private] |
Универсальная функция для обработки изменения сообщения о выходе пользователем.
| nick | Ник пользователя. | |
| bye | Новое сообщение о выходе. | |
| local | Флаг локального подключения true локальное false удалённое. |
| void syncNumerics | ( | const QList< quint8 > & | numerics | ) | [private, slot] |
[private slots]
| void syncProfile | ( | quint8 | gender, | |
| const QString & | nick, | |||
| const QString & | nNick, | |||
| const QString & | name, | |||
| bool | local | |||
| ) | [private] |
Универсальная функция для обработки изменения профиля и/или ника пользователя.
Все действия производятся, только если ник преобразованный в нижний регистр найден в m_users.
Если новый ник является пустой строкой, это означает что ник не изменился а изменилась лишь профильная информация. Если m_users не содержит нового ника приведённого к нижнему регистру или старый и новый ник в нижнем регистре равны, производится изменение ника. Иначе если пользователь локальный и новый ник в нижнем регистре присутствует в m_users, то происходит попытка занять чужой ник, такой пользователь отключается.
| gender | Новый пол пользователя. | |
| nick | Старый ник пользователя. | |
| nNick | Новый ник пользователя, может быть пустой строкой, что означает что ник не изменился. | |
| name | Новое полное имя пользователя. | |
| local | Флаг локального подключения true локальное false удалённое. |
| void universal | ( | quint16 | sub, | |
| const QString & | nick, | |||
| const QList< quint32 > & | data1, | |||
| const QStringList & | data2 | |||
| ) | [private, slot] |
Получение универсального пакета от локального пользователя. Пакет обрабатывается и вызывается сигнал sendUniversal(quint16 sub, const QList<quint32> &data1, const QStringList &data2) для отправки нового универсального пакета для локальных клиентов. В случае поддержки сети пакет также отправляется на корневой сервер или на все вторичные сервера.
Поддерживаемые форматы пакетов: schat::UniStatus.
| void universal | ( | quint16 | sub, | |
| const QList< quint32 > & | data1, | |||
| const QStringList & | data2, | |||
| quint8 | numeric = 0 | |||
| ) | [private, slot] |
Получение универсального пакета от вышестоящего сервера. или если numeric > 0, то от вторичного.
Поддерживаемые форматы пакетов: schat::UniStatusList.
| void updateStatus | ( | quint32 | status, | |
| const QStringList & | users | |||
| ) | [private] |
Обновляет статус пользователей, исключая локальных.
| void userLeave | ( | const QString & | nick, | |
| const QString & | err = QString() | |||
| ) | [private] |
Обработка отключения пользователя.
Все действия производятся, только если ник преобразованный в нижний регистр найден в m_users. При использовании ограничений по количеству подключений с одного адреса, производится уменьшение счётчика адресов или удаление записи в m_ipLimits. Событие отключения записывается в журнал сервера и при необходимости в канальный лог. Высылается сигнал userLeave(const QString &nick, const QString &bye, quint8 flag) и при наличии корневого сервера он также уведомляется об отключении пользователя (при условии, что пользователь локальный).
| nick | Ник пользователя. | |
| err | Ошибка, причина разъединения. |
1.5.8