Инструкции по написанию плагинов

Больше
16 года 8 мес. назад #1 от OverQuantum
Задача написания новых плагинов для R&Q периодически вызывает вопросы на форуме.
В настоящее время исчерпывающий документации по написанию плагинов нет. Надо это устранять.

Предлагаю в данной теме собирать общие знания и выкладывать ссылки на
- Описания
- Инструкции
- Документацию
- Исходники плагинов
- SDK

От меня пока два вклада
1) R&Q mini SDK v4:
rnq.ru/component/option,com_remository/func,fileinfo/id,80/
Содержание:
- краткое введение в систему плагинов
- описание пакетов, включая нововведения до 1073 (на английском)
- заголовочные файлы с константами, а также вспомогательные функции для сбора/разбора пакетов для C/C++ и Delphi

Перечень нововведений (по сравнению с 3 версией - описания от rejetto):
PG_CHAT_UIN
PG_CHAT_XYZ
PG_TRANSLATE
PG_THEME_PIC
PG_STATUS
PG_XSTATUS
PG_RNQ_BUILD
PE_AUTHREQ_SENT
PE_AUTH_GOT
PE_AUTHDENIED_GOT
PE_SELECTTAB
PE_DESELECTTAB
PE_CLOSETAB
PE_QUIT
PE_XSTATUSMSG_SENDING
PE_XSTATUS_REQ_GOT
PC_ADDBUTTON
PC_MODIFY_BUTTON
PC_DELBUTTON
PC_TAB_ADD
PC_TAB_MODIFY
PC_TAB_DELETE
PC_PLAYSOUND
PC_PLAYSOUNDFN
PC_RELOAD_THEME
PC_RELOAD_LANG
PC_ADD_MSG
PC_ADD_TO_INPUT
PC_SET_XSTATUS

Описания нововведений составлено со слов и исходников, за точность ручаться не могу, лично не проверял.
Замечания, предложения, добавления и исправления - всё приветствуется.

2) Выложенный ещё в мае плагин
AwayByLock 0.8 с исходниками (Visual C):
rnq.ru/component/option,com_remository/I.../func,fileinfo/id,2/
Общий принцип создания плагина и разбора пакетов представлен, мне кажется.

Questions are plentiful. Answers are few.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #2 от OverQuantum
Также предлагаю обсудить, не изменить ли нам формат описания пакетов на более читаемый. Если да, то на какой.

Questions are plentiful. Answers are few.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #3 от Headless
Во многих плагинах, в том числе и в TestMachine от ObServeR'а наблюдал наличие модудулей CallExec и CallExec2 с частично дублируемыми функциями. Думается мне неплохо бы было их объединить и добавить в SDK тоже.
Еще неплохо бы было добавить описания неочевидных вещей. Вот я например не понял что такое PE_EMAILEXP_GOT(честно говоря первый раз это вижу :blush:)
PS:
Спасибо OverQuantum'у и ObServeR'у за работу, которую должен был сделать Рапид ;)<br /><br />Post edited by: Headless, at: 2007/09/02 05:23

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #4 от Dolphin
Как-то качал исходники одного плагина. Ребята, просьба, объедините все заголовочные плагинные модули в ОДИН модуль!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #5 от PRO
Имхо, самый удобочитаемый формат описания пакетов - тот, что используеца в api4.txt, и менять его не стоит) Нашел небольшую ошибку в api4.txt:

[code:1]
if event = PE_MSG_GOT
INT sender uin
INT flags
TIME when
ISTRING text
possible replies:
1) PM_ABORT

if event = PE_MSG_SENT
INT dest uin
INT flags
ISTRING text
[/code:1]

надо бы заменить на

[code:1]
if event = PE_MSG_GOT
INT sender uin
INT flags
TIME when
ISTRING text
possible replies:
1) PM_ABORT
2) PM_DATA
ISTRING message for history

if event = PE_MSG_SENT
INT dest uin
INT flags
ISTRING text
possible replies:
1) PM_DATA
ISTRING message for sending
2) PM_DATA
ISTRING message for sending
ISTRING message for history
[/code:1]

Вышеописанные ответы на уведомления плагина крысой обрабатываются корректно, проверил только что)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #6 от OverQuantum
Headless писал:

Еще неплохо бы было добавить описания неочевидных вещей. Вот я например не понял что такое PE_EMAILEXP_GOT(честно говоря первый раз это вижу :blush:)

Если б я знал... :)
Это одно из событий, оставших с древних времён:
- PE_GCARD_GOT
- PE_EMAILEXP_GOT
- PE_WEBPAGER_GOT
- PE_FROM_MIRABILIS_GOT
Их них сейчас вроде только PE_WEBPAGER_GOT можно кое-как протестить - надо отправить мессагу с сайта icq.com
К следующей версии попробую набросать описания.

PRO писал:

Нашел небольшую ошибку в api4.txt:
...
надо бы заменить на
...

О, вот это ценная информация, не знал. Внесу обязательно.
Проверь ещё, пожалуйста, PM_ABORT на PE_MSG_SENT приведёт к отмене отправки?

Questions are plentiful. Answers are few.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #7 от PRO
Неа, не приведет, что в принципе правильно. Ибо тут возможно два типа отмены. Чтобы отменить отправку вообще, надо отвечать PM_DATA с пустой строкой. Чтобы отправить, но не отобразить отправку - PM_DATA, текст сообщения, пустая строка<br /><br />Post edited by: PRO, at: 2007/09/02 21:18

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #8 от PRO
Нет, неправду я сказал. При ответе PM_DATA, текст сообщения, пустая строка отправки тоже не происходит. На широкрысе отправка происходит, но в лог пишется пустое сообщение, что имхо не совсем правильно. Просьба разработчикам поправить этот баг (то есть при таком ответе сообщение должно отправляться, но в лог ничего писаться не должно). Очень нужно для написания плагина передачи файлов через сообщения)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #9 от Fr0st
Неплохо было бы включить в дистриб АПИ модуль CallExec, который все копируют друг у друга и выкидывают все ненужное. Функции-то действительно полезные, намного упрощают взаимодействие с Крысой, а единого стандарта нету.
А еще лучше - на основе этого модуля забацать интерфейс Крысы, чтобы можно было нормально заюзать ООП без всяких там callback-функций, раскиданных по нескольким модулям.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #10 от Rapid D
Плагины на основе ООП - фтопку!
А вот отладить апи - не помешало бы, а то у семи няник, R&amp;Q не выключаеца и зависает от плагинов :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #11 от OverQuantum
Fr0st писал:

Неплохо было бы включить в дистриб АПИ модуль CallExec, который все копируют друг у друга и выкидывают все ненужное. Функции-то действительно полезные, намного упрощают взаимодействие с Крысой, а единого стандарта нету.

Я на Delphi не пишу, мне довольно трудно разбираться в Delphi-шном коде. Давайте кто-нибудь другой займётся сборкой Delphi-шных функций, особенно высокого уровня.

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

Ох и весело отлаживать ООП-код, когда нет исходников одного модуля...
Нет, я считаю межмодульный интерфейс при runtime-связывании должен быть такой же, какой использует операционная система в своей основе. Винда сейчас основана на обычных DLL - такой и должен быть интерфейс.

Но ты можешь написать плагин-хост, который будет подключать к себе плагины другого формата - через ООП. ;)

Questions are plentiful. Answers are few.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 8 мес. назад #12 от Fr0st
Rapid D писал:

Плагины на основе ООП - фтопку!


OverQuantum писал:

Нет, я считаю межмодульный интерфейс при runtime-связывании должен быть такой же, какой использует операционная система в своей основе. Винда сейчас основана на обычных DLL - такой и должен быть интерфейс.


Наверно, тут небольшая недопонятость... я имел в виду объединить все функции из CallExec в один класс, например, TRnQApp, ну и уже с ним выполнять действия. Фактически это лишь удобная обёртка над апи-шными функциями, чтобы не заморачиваться с преобразованием чисел в строку, сбором параметрических строк и т.п. Принцип взаимодействия с программой всё равно останется прежним.
P.S. Не понял насчёт отладки и отсутствия сорсов модуля...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 7 мес. назад - 16 года 7 мес. назад #13 от CowBrat
А есть пример какого-нить простенького плагина на Delphi?
Хочется попробовать свои силы, но пока даже с чего начать не знаю :(
Последнее редактирование: 16 года 7 мес. назад пользователем CowBrat.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
16 года 7 мес. назад #14 от OverQuantum
CowBrat,
погляди эти:
old.rnq.ru/modules/wfdownloads/singlefile.php?cid=4&lid=34
old.rnq.ru/modules/wfdownloads/singlefile.php?cid=6&lid=21
Вроде, довольно простые.

Questions are plentiful. Answers are few.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Модераторы: bassvazoozaDelphukdekRapid D
Время создания страницы: 0.405 секунд
Работает на Kunena форум