ikernel_bus.go 4.1 KB

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