Створення плагінів для mychat

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

Ми починаємо цикл статей з написання програм-додатків для MyChat Client. Оскільки тема дуже велика, а можливості, що надаються цією технологією - дуже широкі, статей буде досить багато.

Для успішного створення програм-додатків для MyChat читачеві досить буде базового знання мови і середовища програмування Delphi. Версія - принципово не важлива, але статті будуть орієнтовані на Delphi 7. і все приклади будуть даватися стосовно цьому середовищі програмування.

1. Що таке модуль?

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

Для того, щоб плагін зміг зробити щось корисне - в MyChat є спеціальний механізм MyChat Plugins SDK. Говорячи просто - це набір функцій, які може викликати плагін і набір функцій, які може викликати програма з плагіна.

2. Архітектура MyChat

Щоб успішно створювати програми-додатки - розробник повинен розуміти схему роботи програми, під яку він збирається створювати що-небудь. Тому коротко обрисуємо схему роботи MyChat.

MyChat - це клієнт-серверний розрахований на багато користувачів чат. Всі клієнти підключаються до одного сервера, і для кожного клієнта сервер створює спеціальну структуру даних, яка знаходиться в пам'яті, поки клієнт онлайн.

У кожного зареєстрованого клієнта системи є номер - UIN. Іншими словами - унікальний ідентифікатор, звичайне число, більше нуля. Цей номер не може бути змінений і він належить клієнту з моменту реєстрації його на сервері. Якщо користувача видалити - UIN не звільняється, а виділяється новий. Таким чином забезпечується цілісність бази даних сервера.

В MyChat також є поняття каналів, або конференцій. У каналах, коли один користувач відправляє повідомлення - його отримують всі люди, які перебувають з цією людиною в одному каналі. Канали, або кімнати, можуть мати різні назви - але кожному з каналів сервер MyChat також призначає спеціальний номер - UID. На відміну від номера користувача, який ніколи не змінюється - UID виділяється динамічно, під час роботи сервера. Поки канал існує - у нього є номер. Як тільки з каналу вийшли всі люди - він автоматично видаляється. UID - це також число, більше нуля. UID також не повторюються, але важливо пам'ятати - що при створенні каналу UID ніяк Неприв'язані до назви каналу - і при следуюшем запуску сервера він може бути іншим. UID -и можна побачити на сервері, під час його роботи, або на клієнті, в закладці "Канали".

Створення плагінів для mychat

3. Менеджер плагінів

Тепер, коли ми більш-менш усвідомили схему роботи системи, перейдемо до вивчення самої системи плагінів в MyChat Client.

Плагін, це динамічна бібліотека (DLL). В MyChat прийнято, що це файл з розширенням .mcp (MyChat Plugin Library). Підключаються ці програми-додатки за допомогою "Менеджера плагінів" з головного меню клієнта "Додатки" - "Управління плагінами" або по гарячій клавіші Alt + P.

Менеджер плагінів виглядає так:

Створення плагінів для mychat

Відмінною особливістю системи програм-додатків в MyChat є те, плагіни можна завантажувати, вивантажувати, включати і вимикати ніж перезапуску MyChatClient - "на льоту". Це значно спрощує життя розробникам і дуже прискорює процес створення і налагодження.

В MyChat кожен плагін повинен мати назву, причому ця назва має бути унікальним. Тобто не може бути завантажено два плагіна з одним і тим же ім'ям. Навпроти кожного завантаженого плагіна в колонці "Назва плагіна" можна зняти галочку - тоді плагін буде як би в "замороженому" стані. Він завантажений - але не активний. Кнопка "вивантажити плагін" вивантажує плагін з пам'яті, а "Завантажити плагін" - відкриває діалог завантаження файлу і після вибору потрібно просто копіює файл плагіна в профіль і завантажує його.

За подвійним клацанням лівою кнопкою мишки або після натискання кнопки "Про плагін" буде показано інформаційне віконце зі зведеною інформацією про плагіні і його творця:

Створення плагінів для mychat

Вся ця інформація знаходиться в самому плагін в спеціальній чітко описаної структурі даних. Тому розробникам настійно рекомендується її заповнювати J

4. Як влаштовані плагіни в MyChat?

Кожен плагін в MyChat складається мінімум з трьох файлів:

  1. DPR-файл проекту;
  2. mcplugin_func.pas - бібліотека функцій з SDK. змінювати її не можна;
  3. mcplugin_info.pas - інформаційний модуль, обов'язково заповнення всіх полів.

Всі функції в плагіні можна умовно розділити на два види: це функції, які викликає програма MyChat Client з плагіна - щодо подій, які виникають в чаті. Назвемо умовно їх "events". І другий вид - це функції, які сам плагін викликає з програми MyChat Client - назвемо їх "tools".

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

Основну програму MyChat Client. з-під якої запускаються плагіни, ми будемо називати "main".

З термінологією визначилися, тепер саме час спробувати зробити хоч щось корисне.

5. Найперший простий плагін для MyChat

За давньою програмістської традиції перша програма виводить на екран сакральне "Hello world! ". Ми не будемо сильно оригінальничати і зробимо щось подібне стосовно MyChat.

Нехай наш перший плагін по кліку правої кнопкою мишки в каналі буде виводити контекстне меню з назвою плагіна, клацнувши по якому в канал буде відправлено повідомлення від нашого імені - "Hello world! ".

Створення плагінів для mychat

Ми бачимо головний модуль плагіна:

Перше, що нам потрібно зробити - назвати свій плагін. Замінюємо слово empty в заголовку бібліотеки: librarymyfirstplugin. Заходимо в меню Delphi. "File" - "Save Project As ..." і зберігаємо проект.

Створення плагінів для mychat

Друге - заповнити довідкову інформацію. Переходимо на модуль mcplugin_info (Ctrl + клацання лівою кнопкою мишки по назві модуля в списку uses):

Створення плагінів для mychat

Заповнюємо необхідну нам інформацію:

Важливий момент! Для того, щоб інтегруватися в контекстне меню, яке викликається по правому кліку кнопкою мишки в каналі, потрібно встановити константу pluginPopupMenuUserInChannelText в одиницю.

Тепер, коли з приготуваннями закінчено, саме час написати той шматочок коду, заради якого все і затівалося J

6. Пишемо код

Подорожуємо у файл проекту (DPR). Тепер потрібно знайти той event. який буде спрацьовувати при натисканні на нашу плагіну в контекстному меню. Це функція mcPluginOnClickPopupMenuChannelWindowText.

Знаходимо потрібну функцію і пишемо такий код:

Функція mcSendMessageToTextChannel. яку ми викликаємо в коді - це текстове повідомлення, надіслане канал. Оскільки UID каналу ми знаємо (він передався в функції-подію), то можна легко відправити повідомлення відразу ж в цей канал.

Тиснемо Ctrl + F9. компілюємо проект і завантажуємо файл myfirstplugin.mcp. який у нас вийшов в результаті компіляції, в "Менеджер плагінів" MyChat Client.

Створення плагінів для mychat

Модуль успішно завантажений.

7. Як воно працює?

Натискаємо в каналі на будь-якому місці у вікні повідомлень праву кнопку мишки і бачимо наш плагін:

Створення плагінів для mychat

Клацаємо по імені плагіна в меню, і - вуаля:

8. Висновок

У розділі "Додатки" на офіційному сайті Network Software Solutions ви можете завантажити вихідні коди різних програм-додатків, щоб побачити, яким чином можна використовувати можливості MyChat Plugins SDK "на повну".

Повний вихідний код плагіна, розглянутого в статті, а також скомпільовану бібліотеку можна скачати тут

Схожі статті