mock_hand_serve.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // package mock_hand_serve -- мок-обработчик входящих запросов
  2. package mock_hand_serve
  3. import (
  4. "fmt"
  5. "sync"
  6. . "gitp78su.ipnodns.ru/svi/kern/kc/helpers"
  7. "gitp78su.ipnodns.ru/svi/kern/kc/safe_bool"
  8. . "gitp78su.ipnodns.ru/svi/kern/krn/kalias"
  9. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  10. )
  11. // MockHandlerServe -- мок-обработчик входящих запросов
  12. type MockHandlerServe struct {
  13. IsBad_ ISafeBool // Признак сбоя при вызове
  14. Msg_ []byte // Для обратного вызова
  15. Name_ AHandlerName // Уникальное имя мок-обработчика подписки
  16. Topic_ ATopic // Имя топика подписки
  17. block sync.Mutex
  18. }
  19. // NewMockHandlerServe -- возвращает новый обработчик подписки
  20. func NewMockHandlerServe(topic ATopic, name string) *MockHandlerServe {
  21. Hassert(topic != "", "NewMockHandlerServe(): topic is empty")
  22. Hassert(name != "", "NewMockHandlerServe(): name is empty")
  23. sf := &MockHandlerServe{
  24. Topic_: topic,
  25. Name_: AHandlerName(name),
  26. IsBad_: safe_bool.NewSafeBool(),
  27. }
  28. _ = IBusHandlerServe(sf)
  29. return sf
  30. }
  31. // Функция обратного вызова подписки
  32. func (sf *MockHandlerServe) FnBack(binMsg []byte) Result[[]byte] {
  33. sf.block.Lock()
  34. defer sf.block.Unlock()
  35. if sf.IsBad_.Get() {
  36. err := fmt.Errorf("FnBack(): isBad==true")
  37. return NewErr[[]byte](err)
  38. }
  39. sf.Msg_ = binMsg
  40. return NewOk(binMsg)
  41. }
  42. // Возвращает уникальное имя обработчика подписки
  43. func (sf *MockHandlerServe) Topic() ATopic {
  44. return sf.Topic_
  45. }
  46. // Возвращает топик для обработчика подписки
  47. func (sf *MockHandlerServe) Name() AHandlerName {
  48. return sf.Name_
  49. }