Общие сведения

Существует 2 вида программ-дополнений для CommFort client 4.30: плагины и программы.

Для связи программ с клиентом CommFort используется протокол UDP. Плагины связываются с CommFort путем экспорта функций.

Программы-дополнения

Основан механизм на приеме и передаче UDP пакетов. Для включения обработки и отправки пакетов в клиенте чата необходимо отредактировать в файле Config\UDPAddons.ini следующие строки:

-------------
[UDPAddon_X]
Enabled=1
IP=здесь указывается IP-адрес программы-надстройки
Port=здесь указывается порт программы-надстройки
-------------

Обратите внимание, CommFort client будет принимать и обрабатывать сообщения только с IP-адреса и порта, указанных в данном ini файле.

Узнать же адрес (в первую очередь порт), по которому необходимо отправлять UDP пакеты к клиенту чата можно по первому пакету, генерируемому программой CommFort client при подключении к серверу.

Плагины

Плагины представляют из себя обычные динамически загружаемые библиотеки (DLL). Для установки необходимо скопировать файл плагина в папку “Plugins”, созданную в каталоге с программой CommFort client и перезапустить программу. Плагины должны иметь расширение «cfcplug». Например “myplugin.cfcplug”. Очередность работы плагинов определяется по алфавиту (имен файлов).

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

Для ознакомления с типами экспортируемых функций, а так же общей структурой плагина используйте прилагающийся исходный код к плагину “Null” (CodeGear C++ Builder 2009), поставляющийся вместе с данной инструкцией.

Плагины могут дополнительно получать информацию от клиента чата средствами функции CommFortGetData (пример использования в исходном коде плагина "Null"). Список данных, которые возможно получить (первая цифра - значение dwDataID):

10 - версия клиентской части
11 - активный на данный момент канал (в случае если первый символ "&" - канал приватный, в случае если длина равна нулю - канал events)
12 - название текущей учетной записи
13 - иконка текущей учетной записи ("0" - мужская иконка, "1" - женская иконка)
14 - текущее состояние

Описание состава сообщений

Для описания состава сообщений, отправляемых клиенту чата и принимаемых от него будут использоваться следующие шаблоны:

число(описание): целое десятичное 32 разрядное число. представляет из себя последовательность 4х байтов, содержащих данное число
текст(описание): текстовые данные. Представляют из себя число(длина текста в байтах) + сам текст
пользователь(описание): текст(имя пользователя) + текст(IP-адрес пользователя)

При отправке сообщений программой-дополнением по протоколу UDP структура данных имеет следующий вид:

число(ID)+данные, описанные в таблице

Состав сообщений, отправляемых клиентом чата

Описание ID Структура данных Примечания
Подключение к серверу данного клиента, список пользователей которые уже присутствуют в чате 3 число(количество пользователей в чате) + пользователь()*количество пользователей в чате в данном случае пользователь() будет повторяться столько раз сколько пользователей в чате
Подключение пользователя 1 пользователь()
Отключение пользователя 2 пользователь()
Сообщение в канале 5 пользователь() + текст(название канала) + текст(опубликованное сообщение или состояние)
Смена темы 6 пользователь() + текст(название канала) + текст(новая тема)
Смена имени 7 пользователь() + текст(новое имя)
Смена состояния 8 пользователь() + текст(новое состояние)
Сообщение в приватный канал 10 пользователь() + текст(сообщение)
Открытие менеджера каналов, ответ запрос списка каналов 11 число(количество общих каналов) + (текст(название канала)+число(количество посетителей)+текст(тема))*количество каналов В данном случае текст(название канала)+число(количество посетителей)+текст(тема) будут повторяться столько раз сколько общих каналов в чате
Получение сообщения 15 пользователь()+текст(дата и время)+текст(сообщение)
Список объявлений 20 число(количество объявлений) + (число(уникальный идентификатор объявления)+пользователь()+текст(дата и время публикации)+текст(текст объявления))*количество объявений Отправляется при подключении клиента к серверу и в качестве ответа на сообщение с ID=80.
Новое объявление 21 число(уникальный идентификатор объявления)+пользователь()+текст(дата и время публикации)+текст(текст объявления)
Объявление отредактировано 22 число(уникальный идентификатор объявления)+текст(новый текст объявления)
Объявление удалено 23 число(уникальный идентификатор объявления)
Список пользователей в канале 30 текст(название канала)+число(количество пользователей в канале)+пользователь()*количество пользователей в канале Отправляется при входе в общие каналы и в качестве ответа на сообщение с ID=90
Вход пользователя в канал 31 текст(название канала)+пользователь()
Выход пользователя из канала 32 текст(название канала)+пользователь()

Состав сообщений, принимаемых клиентом чата

Описание ID Структура данных Примечания
Опубликовать сообщение в канал 50 текст(название канала) + текст(сообщение)
Опубликовать состояние в канал 51 текст(название канала) + текст(состояние)
Опубликовать изображение в канал 54 текст(название канала) + число(формат изображения) + текст(данные изображения) Форматы изображения:
0 - bmp
1 - jpg
2 - png

Данные изображения: последовательность данных, соответствующая файлу изображения
Наложить ограничение 52 число(тип ограничения) + число(тип идентификации) + число(тип анонимности) + число(время в минутах) + текст(учетная запись, либо IP-адрес, либо диапазон IP-адресов) + текст(название канала) + текст(причина ограничения) типы ограничения:
0 - Запретить доступ к чату,
1 - Запретить доступ к каналу,
2 - Запретить публикацию в канале,
3 - Запретить публикацию картинок,
4 - Запретить публикацию объявлений.

типы идентификации:
0 - учетная запись
1 - IP-адрес
2 - диапазон IP-адресов (пример: 192.168.0.0-192.168.0.255)

типы анонимности:
0 - обычное ограничение
1 - анонимное ограничение
Изменить состояние 53 текст(новое состояние) + число(флаг важности сообщений) + число(звуки) + число(всплывающие сообщения в трее) Флаг важности сообщений:
0 - по умолчанию
1 - игнорируется

Звуки:
0 - по умолчанию
1 - отключены

Всплывающие сообщения в трее:
0 - по умолчанию
1 - отключены
Запросить список пользователей (клиент чата вернет сообщение с идентификатором 3) 60
Изменить тему канала 61 текст(название канала) + текст(новая тема)
Изменить приветствие канала 62 текст(название канала) + текст(новое приветствие)
Опубликовать сообщение в приват 63 пользователь() + текст(сообщение) Внимание! Данная команда работает только если клиент имеет право отправки многоадресных сообщений.
Опубликовать состояние в приват 64 пользователь() + текст(состояние) Внимание! Данная команда работает только если клиент имеет право отправки многоадресных сообщений.
Опубликовать изображение в приват 69 пользователь() + число(формат изображения) + текст(данные изображения) Форматы изображения:
0 - bmp
1 - jpg
2 - png

Данные изображения: последовательность данных, соответствующая файлу изображения

Внимание! Данная команда работает только если клиент имеет право отправки многоадресных сообщений.
Выйти из приватного канала 65 пользователь()
Выйти из общего канала 66 текст (канал)
Создать общий канал или подключиться 67 число(режим) + текст (канал) Режимы:
0 - не отображать в списке каналов/вход для всех
1 - отображать в списке каналов/вход для всех
2 - не отображать в списке каналов/вход только по приглашению
3 - отображать в списке каналов/вход только по приглашению
Запросить список каналов 68
Отправка сообщения 70 число(важность)+текст(имя получателя)+текст(сообщение) Важность:
0 - обычное сообщение
1 - важное сообщение

Внимание! Данная команда работает только если клиент имеет право отправки многоадресных сообщений.
Запросить список объявлений 80
Опубликовать объявление 81 число(срок на который публикуется объявление в минутах)+текст(текст объявления) текст объявления может быть не более 5000 символов
Удалить объявление 82 число(уникальный идентификатор объявления)
Запрос списка пользователей в канале 90 текст(название канала) можно получить список пользователей только в том канале в котором находится клиент
Публикация в events 100 число(стиль)+число(время)+число(тип протоколирования)+текст(текст публикации) Стили:
0 - обычный (черный)
1 - системный (серый)
2 - ошибка (красный)

Время:
0 - Публиковать время
1 - Не публиковать время

Типы протоколирования:
0 - Протоколировать в лог
1 - Не протоколировать в лог