Общие сведения
Существует 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х байтов, содержащих данное числоПри отправке сообщений программой-дополнением по протоколу 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 - Не протоколировать в лог |