Арка: Взаимодействие инструментов-2 (Вир)

Следующие способы взаимодействия: уведомления и запросы.

Уведомление определяется парой: верстак, имя уведомления. Любой инструмент может подключиться к уведомлению и ждать его. При подключении надо указать имя команды инструмента, которая будет вызвана в ответ на уведомление. . При подключении указывается: (имя верстака, имя уведомления, имя команды), пример из схемы Вира:

«..» «Изменилась редактируемая программа» «Сохранить адрес стола в тени»

При отправке уведомление надо указать пару: верстак, имя уведомления. Уведомление рассылается всем подключенным инструментам (в порядке подключения). То есть это действительно рассылка, которая используется во многих случаях. Например, инструмент через уведомление, отправляет запись в журнал (log). Так же используется в GUI для уведомления об изменениях.

Основные отличия от вызова команды по указателю:

  • Как правило, подключение к уведомлению задается в схеме, а не закодировано в инструментах. Отправляющий инструмент (инструменты) не связаны с получающими инструментами. Это существенно увеличивает гибкость и позволяет писать (более) универсальные инструменты.
  • Рассылка уведомлений безопасна. При удалении инструмента он автоматически вывязывается из всех списков рассылки. Как и везде в Вире, проверка сигнатуры команды, принимающей уведомление не делается.

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

Запросы и уведомления появились на втором этапе развития Вира. Замечу, что Вир однопроцессный, но если добавить параллелизм, то уведомления — это асинхронное взаимодействие, а запросы — синхронное.

Третий этап развития Вира — это добавление разъемов.

Разъемы так же, как уведомления и запросы позволяют задать взаимодействие через схему (а не заданы в коде инструмента). Разъемы должны быть определены у каждого из двух взаимодействующих инструментов — у одного исходящий разъем, у другого — входящий. Всего было две пары разъемов: входящий — исходящий:

  • Передатчик — Приемник (не нужен результат)
  • Заказчик — Поставщик (нужен результат)

Разъемы позволяли ускорить взаимодействие — после подключения вызов через разъем был по скорости сравним с обычным вызовом через виртуальную таблицу.

Но разъемы не решали задачу тесного взаимодействия инструментов, когда один инструмент использует несколько (много) команд другого инструмента. Но об этом дальше.

Итого, способы взаимодействия команды в Вире:

  • прямой вызов команды инструмента
  • прямой вызов основной команды инструмента
  • косвенный вызов основной команды инструмента через верстак
  • отправка/получение уведомления
  • отправка/обработка запроса
  • взаимодействие через разъем: Передатчик — Приемник
  • взаимодействие через разъем: Заказчик — Поставщик

 

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *