idict_topic.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package bus_spec
  2. import (
  3. "gitp78su.ipnodns.ru/svi/kern/v4/lev0"
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lti/bus_ent"
  6. )
  7. // IDictSubHook -- словарь обработчиков по единственному топику.
  8. type IDictSubHook interface {
  9. // Subscribe -- подписывает обработчик
  10. Subscribe(IBusHandlerSubscribe)
  11. // Read -- все локальные обработчики читают сообщение по его приходу
  12. Read(binMsg []byte)
  13. // Unsubscribe -- отписывает обработчик
  14. Unsubscribe(IBusHandlerSubscribe)
  15. }
  16. // IDictTopicSub -- интерфейс к словарю обработчиков подписки на словарь топиков.
  17. //
  18. // При подписке потребителей топика может быть НЕСКОЛЬКО на КАЖДЫЙ топик.
  19. type IDictTopicSub interface {
  20. // Subscribe -- подписывает подписчиков на любой из топиков
  21. Subscribe(IBusHandlerSubscribe)
  22. // Read -- читает сообщение для всех обработчиков подписки по приходу на любой из топиков
  23. Read(topic bus_ent.ITopicFix, binMsg []byte)
  24. // Unsubscribe -- отписывает подписчиков от любого из топиков
  25. Unsubscribe(IBusHandlerSubscribe)
  26. }
  27. // IDictTopicServe -- интерфейс к обработчику входящих запросов на словарь топиков.
  28. //
  29. // При обслуживании входящих запросов обработчик может быть только ОДИН на КАЖДЫЙ топик.
  30. // Но обработчик вызывается конкурентно.
  31. type IDictTopicServe interface {
  32. // Register -- регистрирует единственный обработчик на единственный топик
  33. Register(IBusHandlerServe) *lev0.Result[core_spec.EBool]
  34. // SendRequest -- выполняет запрос по указанному топику
  35. SendRequest(topic bus_ent.ITopicFix, binReq []byte) *lev0.Result[[]byte]
  36. // Unregister -- удаляет единственный обработчик с единственного топика
  37. Unregister(IBusHandlerServe)
  38. }