Створення плагінів на delphi для чату commfort, блог delphi-програміста

Створення плагінів на delphi для чату commfort, блог delphi-програміста
Доброго времени суток дорогі читачі блогу. У цій статті я хотів би поговорити трохи про те, як можна створювати плагіни для такого відомого чату як Commfort. Плагін я розробляв саме для своїх цілей. На роботі у нас встановлений сервер даного чату, і я написав невеликий плагін для нашого каналу, який має вигляд вікторини. Тобто через деякий час (задається в настройках плагіна) в канал (певний) виводиться повідомлення (питання) певної тематики, і користувачі починають писати відповіді, при правильній відповіді нараховується бали, потім можна подивитися, хто лідирує у вікторині і так далі. Можна завантажувати нові питання і відповіді, і багато іншого.

Взагалі мені подобається писати плагіни для різних додатків. Я вже якось розглядав статтю про те, як можна написати будь-який плагін для такого додатка як Download Master. Справа в тому, що розробники Download Master надають досить розширену документацію з написання плагінів до їх застосування, та й прикладів дуже багато саме на Delphi. не кажучи вже про різні шаблонах, а ось з плагіном до Commfort досить мало інформації, тільки загальна і приклади на С ++. Так, звичайно по приклади можна без проблем переробити в свій приклад, на тому ж самому Delphi. ніж я в принципі і займався. Мені просто було цікаво розглянути дану тему. Також тут цікаве, що плагіни можна писати як для клієнтської частини, так і для серверної частини Commfort.

При створенні полігонів для Commfort є кілька нюансів. Якщо помітите, то при установці даного чату, в каталозі з програмою немає жодної папки з ім'ям, схожим для того, щоб визначити, куди необхідно встановлювати плагіни. Також розширення у самого файлу плагін не є .dll. як зазвичай і в більшості випадках, так і є, а трохи інше, про який ми поговоримо трохи пізніше. Але природно дані плагіни є динамічними завантажуються бібліотеками.

Давайте розглянемо деякі принципи при створенні полігонів на Delphi для Commfort.

  1. Розширення у нашого плагіна має бути «cfcplug», наприклад його вид в результаті повинен бути наступним: mynameplugin.cfcplug або ж mynameplugin.dll.cfcplug
  2. В обов'язковому порядку необхідно використовувати угоду _stdcall. для функцій плагіна.
  3. Модулі повинні лежати в папці Plugins. яка повинна бути в корені папці, де встановлений чат Commfort. За замовчуванням ця папка не створюється, тому її необхідно створити вручну (папку Plugins) і покласти в неї необхідні плагіни, перезапустити Commfort і Ваш плагін повинен визначитися без проблем.

Якщо Ви пишіть функції, які пов'язані саме з адміністрування сервера, то необхідно для цього облікового запису виставити відповідні права.

Ну що, давайте тепер приступимо до створення самого плагіна і розгляду основних функцій для створення полігонів.

Основні функції, які використовуються для створення полігонів для Commfort:

  • PluginInit - дана функція викликається при створенні плагіна, тут найкраще передбачити виділення пам'яті для об'єктів, змінних, якщо звичайно потрібно це.
  • PluginTerminate - дана функція викликається при зупинці плагіна, тут відповідно необхідно звільняти пам'ять, якщо Ви при ініціалізації її виділяли.
  • PluginProcces - дана функція викликається при виникненні різних подій: відправлення повідомлень, отримання повідомлень, вихід з каналу і багато інших.
  • PluginShowOptions - дана функція викликається, коли натискається на кнопку «Опції плагіна» в настройках Commfort.
  • PluginShowAbout - дана функція викликається, коли натискається кнопка «Про плагін»
  • CommFortGetData - дана функція призначена для того, щоб отримати інформацію від програми: версію, повідомлення, який канал в даний момент активний і так далі.
  • CommFortProcess - дана функція призначена для того, щоб ініціювати деякі події: відправки повідомлення, наприклад.

Ну, ось і все, начебто з основними функціями ми розібралися, тепер давайте створимо найпростіший плагін, а вже в наступній частині нашої статті, ми розглянемо вже більш серйозний плагін.

Давайте відкриємо IDE Delphi (у мене Delphi7) і виконаємо команду File-New-Other ... і у вікні, у вкладці New виберемо DLL Wizard і натиснемо кнопку Ок. Після uses давайте пропишемо: - це для того, щоб наша бібліотека (плагін) компілювався відразу з потрібним нам розширенням. Хоча це не обов'язково робити, розширення можна в будь-який момент змінити. Давайте назвемо нашу бібліотеку і зберегти її, наприклад MyPlugin.

Тепер давайте створимо Unit і задамо йому ім'я, наприклад Constant. там ми будемо перераховувати всі наші константи плагіна. У ньому підключимо модуль Windows і нам необхідно оголосити структуру (запис). Даний запис буде містити інформацію про наш плагін. Це ми всі робимо в даному модулі Constant.pas. Даний запис виглядає у мене в такий спосіб:

  • TCommFortProcess = function (dwPluginID. DWORD; dwMessageID. DWORD; bMessage. PCHAR; dwMessageLength. DWORD). BYTE; stdcall;
  • TCommFortGetData = function (dwDataID. DWORD; bBuffer. PCHAR; dwBufferSize. DWORD): DWORD; stdcall;

Потім робимо експорт наших функцій exports PluginInit. PluginProcess; і в самий останній момент, оголошуємо константи:

Все зрозуміло, я думаю, оголошуємо назва нашого плагіна, його опис і, звичайно ж, версію клієнта або сервера чату, для якого робиться наш плагін. Все, з даним модулем б розібралися і до нього, швидше за все вже повертатися не будемо, тому зберігаємо його і закриваємо. Тепер створюємо ще один модуль (Unit), де безпосередньо ми будемо реалізовувати наш функції плагіна. Я даний модуль зберіг під назву Main.pas.

В даному модулі в uses у мене підключені наступні модулі:

Як бачите тут присутній наш модуль констант - Constant. Далі, в даному модулі ми оголошуємо функції для ініціалізації плагіна (PluginInit) і функція, яка виникає при виникненні деяких подій в чаті (відправлення повідомлень, вихід їх каналу, отримання повідомлень і так далі) - функція PluginProcces. у мене це виглядає наступним чином: