Класс Daemon

Сервер чата. Подробнее...

#include <daemon.h>

Граф связей класса Daemon:

Collaboration graph

Полный список членов класса

Сигналы

Открытые члены

Закрытые слоты

Закрытые члены

Закрытые данные


Подробное описание

Сервер чата.

Класс полностью включает в себя функциональность сервера чата.


Конструктор(ы)

Daemon ( QObject *  parent = 0  ) 

Конструктор класса Daemon.

Аргументы:
parent Указатель на родительский объект.


Методы

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 Параметр игнорируется и не используется.
См. также:
userLeave(const QString &nick, const QString &err)

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 Флаг подключения.
См. также:
greetingLink(const QStringList &list, DaemonService *service), greetingUser(const QStringList &list, DaemonService *service)

void greetingLink ( const QStringList &  list,
DaemonService service 
) [private]

Обработка приветствия от удалённого сервера.

Для успешного подключения должны быть соблюдены следующие условия:

  • Сконфигурированная сеть m_network.
  • Должны совпадать ключи сети.
  • Удалённый сервер должен иметь уникальный номер.

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

Факт подключения записывается в журнал.

Аргументы:
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).

Возвращает:
Возвращает true в случае успеха.

bool initStats (  )  [private]

Инициализирует поддержку записи статистической информации.

void link (  )  [private]

Инициализирует поддержку сети и при необходимости устанавливает соединение с вышестоящим сервером.

Для успешной инициализации сети необходимы следубщие условия

  • "Numeric" > 0
  • "Name" не является пустой строкой
  • "Network" == true
  • "NetworkFile" удалось успешно прочитать xml файл сети.
  • "RootServer" для некорневого сервера необходимы адреса вышестоящего сервера.

В случае ошибки 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 Адрес сервера
См. также:
newLink(quint8 numeric, const QString &network, const QString &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 пустая строка, то это сообщение предназначено для отправки в главный канал. Происходит рассылка уведомление для локальных клиентов и остальных серверов, при необходимости добавляется запись в канальный лог.

Отправка приватных сообщений производится различными способами в зависимости от того к какому серверу подключен получатель. Получатель может быть:

  • Подключенным локально к этому серверу (numeric == m_numeric).
  • Подключенным к одному из серверов подключенных к данному серверу (m_links.contains(numeric)).
  • Подключенным к серверу к которому невозможно обратится на прямую, в этом случае при наличии клиентского подключения, сообщение передаётся на вышестоящий сервер.

Аргументы:
channel Канал/ник для кого предназначено сообщение (пустая строка - главный канал).
nick Ник отправителя сообщения.
msg Сообщение.
См. также:
parseCmd(const QString &nick, const QString &msg).

void newLink ( quint8  numeric,
const QString &  network,
const QString &  ip 
) [private, slot]

Уведомление о подключении к удалённому серверу другого сервера.

Номер нового сервера добавляется в список серверов и высылается уведомление о новом сервере.

Аргументы:
numeric Номер сервера подключившегося к сети.
network Название сети.
ip Адрес сервера
См. также:
linkLeave(quint8 numeric, const QString &network, const QString &ip)

bool parseCmd ( const QString &  nick,
const QString &  msg 
) [private]

Обработка команд предназначенных для сервера.

Аргументы:
nick Ник пользователя отправившего сообщение.
msg Сообщение.
Возвращает:
true если команда опознана и выполнена, false при возникновении любой ошибки.

Команда "/server"

void relayMessage ( const QString &  channel,
const QString &  sender,
const QString &  msg 
) [private, slot]

Обработка сообщения пользователя полученного с другого сервера.

Если channel пустая строка, то это сообщение предназначено для отправки в главный канал. Происходит рассылка уведомление для локальных клиентов и остальных серверов, при необходимости добавляется запись в канальный лог.

Отправка приватных сообщений произовдится различными способами в зависимости от того к какому серверу подключен получатель. Получатель может быть:

  • Подключенным локально к этому серверу (numeric == m_numeric).
  • Подключенным к одному из серверов подкюченных к данному серверу (m_links.contains(numeric)).

Аргументы:
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 Ошибка, причина разъединения.
См. также:
linkLeave(const QString &nick, const QString &err), userLeave(const QString &nick, const QString &err)

bool start (  ) 

Запуск сервера.

Функция читает настройки сервера, устанавливает параметры логирования каналов и производит запуск сервера m_server. Данные о попытке запуска заносятся в лог файл.

Возвращает:
true в случае успешного запуска, и false при возникновении любой ошибки.

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 Ошибка, причина разъединения.


Документация по IMPOMEZIA Simple Chat. Последние изменения: Wed Feb 25 02:12:45 2009. Создано системой  doxygen 1.5.8
Бесплатный хостинг от EOMY.NET