Все отлично знакомы с концепцией шины сообщений в ББ. Так же все отлично знают наиболее полную (по возможностям) реализацию шины из комплекта
Abf. Однако, в процессе её использования были выделены наиболее простые методы использования - широковещание. Вместе с тем, подсистема Abf более не развивается и не каждый захочет её использовать в своих проектах.
В результате обсуждений, Е. Темиргалеев выделил основные функции шины в специальный встраиваемый компонент omc.
Чем я и воспользовался, встроив и расширив модуль
omcBus в подсистему ypk имени меня, назвав модуль
ypkBus.
Самое первое расширение появилось благодаря опытам с много-агентными системами. Так, обнаружилось, что агенты более органично сочетаются с отложенными действиями и шиной сообщений. Например, сообщение обрабатывается агентом, по результатам обработки агент планирует своё поведение на следующий шаг, всё асинхронно, все рады.
Поэтому первое расширение -
ypkSysAgents - представляет собой скелет агента с хэндлером и методом отложенных действий. Эти агенты были использованы мной в проекте, и доказали свою применимость в рамках концепций, о которых я уже не раз говорил, это работа с сетью, представление сущности пользователя (в том числе и удалённого) и другие функции, которые имеют принципиальную зависимость от времени, как характеристики среды.
Второе расширение -
ypkAbfAgent. Как уже понятно из названия, это расширение служит мостом между двумя шинами, потому что ведь Abf мы уже успели использовать в наших проектах и компонентах. А это расширение позволяет бесшовно наладить общение между двумя шинами (в
AbfBus, конечно, дойдут только соответствующие расширения типа
AbfBus.Message).
В ходе работы с агентами было замечено, что многие из них используются мною как аггрегаты, в том смысле, в котором описывает их И. Ермаков в документации к Active BlackBox. Стало интересно, а возможна ли реализация агентов, которые не будут унаследованы от специального типа
ypkSysAgents.Agent.
Поэтому возникла соответствующая тема
viewtopic.php?f=47&t=4175 и в скором времени, реализация на стандартном ядре, механизма агрегации деталей.
А вместе с ним, практически одновременно возникло третье расширение шины сообщений:
ypkBusService, то есть сервис, который обеспечивает хендлером шины абсолютно любой динамический объект. Конечно, неизбежны некоторые особенности, связанные с невозможностью настройки-изменения стандартного ядра, но они вполне уравновешиваются достоинствами подобного решения. Например, в одном проекте я смог наделить обычное отображение Views.View ещё одним каналом связи, он заменил мне доменную шину, о которой было столько разговоров на форуме, и по этому каналу я смог общаться с отображением даже во время его отсутствия на экране и в дереве фреймов, соответственно.
И наконец, самое свежее расширение, которое ещё находится в стадии разработки, но уже перешагнуло определённую черту, которая позволит заявить, что расширение живёт и будет жить
Это расширение было слегка описано вот здесь
viewtopic.php?p=77568#p77568 и уже, в каком-то смысле, один раз было реализовано, но на базе протокола Xmpp
viewtopic.php?p=53141#p53141 и даже была использована в настоящем проекте для связи удалённых ББ.
Но Xmpp имеет много специальных условий и зависит от стороннего ПО.
Поэтому на подходе расширение
ypkBusComm - компонент, соединивший в себе основные наработки недавнего времени, планируется к использованию в локальных сетях для обмена сообщениями между экземплярами ББ на разных компьютерах. Методы широковещания UDP позволят отказаться от настройки примитивных параметров, таких как IP и порт и работать непосредственно с модулем
ypkBus, не ощущая расстояний между компьютерами, с определёнными ограничениями, конечно, но лучшее - враг хорошего
. Отдельно хочется отметить тот факт, что для обмена использован язык сериализации
JSON(и он может быть заменён на любой другой, компонентность аднака) что позволит, по моим планам, подключать к шине ББ не только ББ, но и вообще любой программный продукт, работающий с каналами связи.
В заключение хотелось бы отметить, что минусы подобного общения по сокетам в рамках одного компьютера учтены в абстракциях, которые были сформированы в процессе разработки, поэтому, в дальнейших планах развития коммуникационных возможностей значится как компоненты для построения шины и вне локальной сети с помощью повторителей и мостов, так и реализация быстрой локальной шины на одном компьютере через механизмы общей памяти ОС, про которые не раз рассказывал И. Ермаков, и надеюсь, он в скором времени предоставит, хоть в каком-то виде такие полезные наработки.
Всё вышеописаное доступно в публичном доступе в репозитории Битбакет.
https://bitbucket.org/petryxa/bbcb(ред-р кол-ции) карточка: http://oberoncore.ru/bbcc/subs/ypk/