mock_hand_sub_http.go 2.5 KB

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