mock_hand_sub_http.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // package handler_http_sub -- обработчик подписки по HTTP.
  2. package mock_hand_sub_http
  3. import (
  4. "crypto/rand"
  5. "log"
  6. "sync"
  7. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  8. mKa "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kalias"
  9. mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/ktypes"
  10. )
  11. // MockHandSubHttp -- обработчик подписки по HTTP.
  12. type MockHandSubHttp struct {
  13. Name_ mKa.AHandlerName // Уникальное имя обработчика
  14. Topic_ mKa.ATopic // Имя топика, на который подписан обработчик
  15. WebHook_ string // Куда обращаться при запросах
  16. BinMsg_ []byte // Последнее бинарное сообщение
  17. block sync.RWMutex
  18. }
  19. // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP.
  20. func NewMockHandSubHttp(topic mKa.ATopic, webHook string) mKt.IBusHandlerSubscribe {
  21. mKh.Hassert(topic != "", "NewHandlerHttpSub(): topic is empty")
  22. mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty")
  23. sf := &MockHandSubHttp{
  24. Topic_: topic,
  25. Name_: mKa.AHandlerName(webHook + "_" + rand.Text()),
  26. WebHook_: webHook,
  27. }
  28. return sf
  29. }
  30. // Topic -- возвращает имя топика, на который подписан обработчик.
  31. func (sf *MockHandSubHttp) Topic() mKa.ATopic {
  32. return sf.Topic_
  33. }
  34. // SetName -- устанавливает имя обработчика.
  35. func (sf *MockHandSubHttp) SetName(name mKa.AHandlerName) {
  36. sf.block.Lock()
  37. defer sf.block.Unlock()
  38. mKh.Hassert(name != "", "HandlerHttpSub.SetName(): name is empty")
  39. sf.Name_ = name
  40. }
  41. // Name -- возвращает уникальное имя обработчика.
  42. func (sf *MockHandSubHttp) Name() mKa.AHandlerName {
  43. sf.block.RLock()
  44. defer sf.block.RUnlock()
  45. return sf.Name_
  46. }
  47. // FnBack -- обратный вызов по приходу сообщения.
  48. func (sf *MockHandSubHttp) FnBack(binMsg []byte) {
  49. sf.block.Lock()
  50. defer sf.block.Unlock()
  51. log.Printf("HandlerHttpSub.FnBack(): msg=%v\n", string(binMsg))
  52. sf.BinMsg_ = binMsg
  53. }
  54. // Msg -- возвращает строковое представление хранимого сообщения.
  55. func (sf *MockHandSubHttp) Msg() string {
  56. sf.block.Lock()
  57. defer sf.block.Unlock()
  58. return string(sf.BinMsg_)
  59. }