mock_hand_sub.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // package mock_hand_sub -- мок-обработчик подписки.
  2. package mock_hand_sub_local
  3. import (
  4. "crypto/rand"
  5. "sync"
  6. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name"
  8. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic"
  9. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  10. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  11. )
  12. type MockHandlerSub struct {
  13. Msg_ []byte // Для обратного вызова
  14. Name_ *handler_name.AHandlerName // Уникальное имя мок-обработчика подписки
  15. Topic_ *topic.ATopic // Имя топика подписки
  16. block sync.RWMutex
  17. }
  18. // NewMockHandlerSub -- возвращает новый обработчик подписки.
  19. func NewMockHandlerSub(topic *topic.ATopic, localHook string) *MockHandlerSub {
  20. mKh.Hassert(topic.Get() != "", "NewMockHandlerSub(): topic is empty")
  21. mKh.Hassert(localHook != "", "NewMockHandlerSub(): name is empty")
  22. sf := &MockHandlerSub{
  23. Topic_: topic,
  24. Name_: mKd.NewHandlerName(localHook + "_" + rand.Text()),
  25. }
  26. _ = mKs.IBusHandlerSubscribe(sf)
  27. return sf
  28. }
  29. // Возвращает хранимое значение.
  30. func (sf *MockHandlerSub) Msg() string {
  31. sf.block.RLock()
  32. defer sf.block.RUnlock()
  33. return string(sf.Msg_)
  34. }
  35. // Функция обратного вызова подписки.
  36. func (sf *MockHandlerSub) FnBack(binMsg []byte) {
  37. sf.block.Lock()
  38. defer sf.block.Unlock()
  39. sf.Msg_ = binMsg
  40. }
  41. // Возвращает уникальное имя обработчика подписки.
  42. func (sf *MockHandlerSub) Topic() *topic.ATopic {
  43. return sf.Topic_
  44. }
  45. // Возвращает топик для обработчика подписки.
  46. func (sf *MockHandlerSub) Name() *handler_name.AHandlerName {
  47. return sf.Name_
  48. }