idict_topic.go 2.2 KB

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