ikernel_bus.go 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package kspec
  2. import (
  3. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
  5. )
  6. // IBusBaseHandler -- базовый обработчик обратного вызова.
  7. type IBusBaseHandler interface {
  8. // Topic -- топик подписки обработчика
  9. Topic() *topic.ATopic
  10. // Name -- уникальное имя обработчика
  11. Name() *handler_name.AHandlerName
  12. }
  13. // IBusHandlerSubscribe -- объект обработчика подписки.
  14. type IBusHandlerSubscribe interface {
  15. IBusBaseHandler
  16. // FnBack -- функция обратного вызова
  17. FnBack([]byte)
  18. }
  19. // IBusHandlerServe -- обработчик входящих запросов.
  20. type IBusHandlerServe interface {
  21. IBusBaseHandler
  22. // FnBack -- функция обратного вызова
  23. FnBack(binReq []byte) IResult[[]byte]
  24. }
  25. // IDictSubHook -- словарь обработчиков по единственному топику.
  26. type IDictSubHook interface {
  27. // Subscribe -- подписывает обработчик
  28. Subscribe(IBusHandlerSubscribe)
  29. // Read -- все локальные обработчики читают сообщение по его приходу
  30. Read(binMsg []byte)
  31. // Unsubscribe -- отписывает обработчик
  32. Unsubscribe(IBusHandlerSubscribe)
  33. }
  34. // IDictTopicSub -- интерфейс к словарю обработчиков подписки на словарь топиков.
  35. //
  36. // При подписке потребителей топика может быть НЕСКОЛЬКО на КАЖДЫЙ топик.
  37. type IDictTopicSub interface {
  38. // Subscribe -- подписывает подписчиков на любой из топиков
  39. Subscribe(IBusHandlerSubscribe)
  40. // Read -- читает сообщение для всех обработчиков подписки по приходу на любой из топиков
  41. Read(topic *topic.ATopic, binMsg []byte)
  42. // Unsubscribe -- отписывает подписчиков от любого из топиков
  43. Unsubscribe(IBusHandlerSubscribe)
  44. }
  45. // IDictTopicServe -- интерфейс к обработчику входящих запросов на словарь топиков.
  46. //
  47. // При обслуживании входящих запросов обработчик может быть только ОДИН на КАЖДЫЙ топик.
  48. // Но обработчик вызывается конкурентно.
  49. type IDictTopicServe interface {
  50. // Register -- регистрирует единственный обработчик на единственный топик
  51. Register(IBusHandlerServe) IResult[EBool]
  52. // SendRequest -- выполняет запрос по указанному топику
  53. SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
  54. // Unregister -- удаляет единственный обработчик с единственного топика
  55. Unregister(IBusHandlerServe)
  56. }
  57. // IKernelBus -- шина сообщений ядра.
  58. //
  59. // Публикация и запрос требуют параметров на _передачу_.
  60. // Подписка и обслуживание входящих запросов требует _обработчиков_.
  61. type IKernelBus interface {
  62. // Publish -- публикует сообщение в шину
  63. Publish(topic *topic.ATopic, binMsg []byte) IResult[EBool]
  64. // SendRequest -- выполняет запрос по указанному топику
  65. SendRequest(topic *topic.ATopic, binReq []byte) IResult[[]byte]
  66. // Subscribe -- подписывает обработчик на топик
  67. Subscribe(IBusHandlerSubscribe) IResult[EBool]
  68. // Unsubscribe -- отписывается от топика
  69. Unsubscribe(IBusHandlerSubscribe)
  70. // RegisterServe -- Регистрирует обработчик на обслуживание входящих запросов
  71. RegisterServe(IBusHandlerServe) IResult[EBool]
  72. // IsWork -- возвращает признак работы шины
  73. IsWork() EBool
  74. // Log -- возвращает буферный лог
  75. Log() ILogBuf
  76. }
  77. // IBusClient -- интерфейс клиента к шину.
  78. type IBusClient interface {
  79. IKernelBus
  80. }