mock_hand_sub.go 1.7 KB

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