Плагинная архитектура Miranda-ng

Сегодня мы посмотрим как устроено взаимодействие между частями этого монстра.

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

Любой плагин экспортирует 3 функции:

Первая для получения базовой информации о плагине, вроде его автора, следующие – для загрузки и выгрузки.

В старых версиях миранды, список внутренних апи передавался через структуру, ссылку на которую принимала функция:

Давайте её рассмотрим:

Сейчас плагин просто импортирует нужные ему функции из ядра, стандартными средствами Pe32.

Существует всего 2 механизма взаимодействия: хуки и сервисы.

Services

Сервис – это функция, существующая в единственном экземпляре, доступ к ней мы получаем по имени.

Регистрация сервиса:

Первый параметр – имя сервиса, второй – коллбек, вида:

Вызов сервиса:

В нашем примере, ядро регистрирует сервисы для взаимодействия с сетью, плагины вызывают их по имени.

Hooks

Хук – это функция на событие, поясню на примере:

  1. Плагин создаёт событие, его имя помещается в глобальный массив.
  2. Теперь другие плагины могут вешать хук на это событие.
  3. Плагин создавший событие, может создавать нотификации, которые передаются всем заинтересованным плагинам из пункта 2.

Создание события:

Ядро отдаёт нам хендл, с помощью которого мы сможем создавать нотификации.

Регистрация хука:

Первый параметр – имя хука, второй – коллбек, вида:

Создание нотификации:

Вот собственно и все механизмы взаимодействия.

Ядерный функционал

Бонус для разрабов , список всех сервисов ядра

Подробней о внутренних структурах смотри исходник миранды.

One thought on “Плагинная архитектура Miranda-ng

Добавить комментарий