package kspec import ( "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic" ) // IBusBaseHandler -- базовый обработчик обратного вызова. type IBusBaseHandler interface { // Topic -- топик подписки обработчика Topic() *topic.ATopic // Name -- уникальное имя обработчика Name() *handler_name.AHandlerName } // IBusHandlerSubscribe -- объект обработчика подписки. type IBusHandlerSubscribe interface { IBusBaseHandler // FnBack -- функция обратного вызова FnBack([]byte) } // IBusHandlerServe -- обработчик входящих запросов. type IBusHandlerServe interface { IBusBaseHandler // FnBack -- функция обратного вызова FnBack(binReq []byte) IResult[[]byte] } // IDictSubHook -- словарь обработчиков по единственному топику. type IDictSubHook interface { // Subscribe -- подписывает обработчик Subscribe(IBusHandlerSubscribe) // Read -- все локальные обработчики читают сообщение по его приходу Read(binMsg []byte) // Unsubscribe -- отписывает обработчик Unsubscribe(IBusHandlerSubscribe) } // IDictTopicSub -- интерфейс к словарю обработчиков подписки на словарь топиков. // // При подписке потребителей топика может быть НЕСКОЛЬКО на КАЖДЫЙ топик. type IDictTopicSub interface { // Subscribe -- подписывает подписчиков на любой из топиков Subscribe(IBusHandlerSubscribe) // Read -- читает сообщение для всех обработчиков подписки по приходу на любой из топиков Read(topic *topic.ATopic, binMsg []byte) // Unsubscribe -- отписывает подписчиков от любого из топиков Unsubscribe(IBusHandlerSubscribe) } // IDictTopicServe -- интерфейс к обработчику входящих запросов на словарь топиков. // // При обслуживании входящих запросов обработчик может быть только ОДИН на КАЖДЫЙ топик. // Но обработчик вызывается конкурентно. type IDictTopicServe interface { // Register -- регистрирует единственный обработчик на единственный топик Register(IBusHandlerServe) IResult[EBool] // SendRequest -- выполняет запрос по указанному топику SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte] // Unregister -- удаляет единственный обработчик с единственного топика Unregister(IBusHandlerServe) } // IKernelBus -- шина сообщений ядра. // // Публикация и запрос требуют параметров на _передачу_. // Подписка и обслуживание входящих запросов требует _обработчиков_. type IKernelBus interface { // Publish -- публикует сообщение в шину Publish(topic *topic.ATopic, binMsg []byte) IResult[EBool] // SendRequest -- выполняет запрос по указанному топику SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte] // Subscribe -- подписывает обработчик на топик Subscribe(IBusHandlerSubscribe) IResult[EBool] // Unsubscribe -- отписывается от топика Unsubscribe(IBusHandlerSubscribe) // RegisterServe -- Регистрирует обработчик на обслуживание входящих запросов RegisterServe(IBusHandlerServe) IResult[EBool] // IsWork -- возвращает признак работы шины IsWork() EBool // Log -- возвращает буферный лог Log() ILogBuf } // IBusClient -- интерфейс клиента к шину. type IBusClient interface { IKernelBus }