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. mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs"
  8. mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  9. mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec"
  10. )
  11. // MockHandSubHttp -- обработчик подписки по HTTP.
  12. type MockHandSubHttp struct {
  13. Name_ *mKd.HandlerName // Уникальное имя обработчика
  14. Topic_ *mKd.Topic // Имя топика, на который подписан обработчик
  15. WebHook_ string // Куда обращаться при запросах
  16. BinMsg_ []byte // Последнее бинарное сообщение
  17. block sync.RWMutex
  18. }
  19. // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP.
  20. func NewMockHandSubHttp(topic *mKd.Topic, webHook string) mKs.IBusHandlerSubscribe {
  21. mKh.Hassert(topic.Get() != "", "NewHandlerHttpSub(): topic is empty")
  22. mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty")
  23. sf := &MockHandSubHttp{
  24. Topic_: topic,
  25. Name_: mKd.NewHandlerName(webHook + "_" + rand.Text()),
  26. WebHook_: webHook,
  27. }
  28. return sf
  29. }
  30. // Topic -- возвращает имя топика, на который подписан обработчик.
  31. func (sf *MockHandSubHttp) Topic() *mKd.Topic {
  32. return sf.Topic_
  33. }
  34. // SetName -- устанавливает имя обработчика.
  35. func (sf *MockHandSubHttp) SetName(name *mKd.HandlerName) {
  36. sf.block.Lock()
  37. defer sf.block.Unlock()
  38. mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty")
  39. sf.Name_ = name
  40. }
  41. // Name -- возвращает уникальное имя обработчика.
  42. func (sf *MockHandSubHttp) Name() *mKd.HandlerName {
  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. }