mock_hand_sub_http.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // package handler_http_sub -- обработчик подписки по HTTP
  2. package mock_hand_sub_http
  3. import (
  4. // "bytes"
  5. "crypto/rand"
  6. "log"
  7. "sync"
  8. // "net/http"
  9. . "gitp78su.ipnodns.ru/svi/kern/v2/kc/helpers"
  10. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/kalias"
  11. . "gitp78su.ipnodns.ru/svi/kern/v2/krn/ktypes"
  12. )
  13. // MockHandSubHttp -- обработчик подписки по HTTP
  14. type MockHandSubHttp struct {
  15. Name_ AHandlerName // Уникальное имя обработчика
  16. Topic_ ATopic // Имя топика, на который подписан обработчик
  17. WebHook_ string // Куда обращаться при запросах
  18. BinMsg_ []byte // Последнее бинарное сообщение
  19. block sync.RWMutex
  20. }
  21. // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP
  22. func NewMockHandSubHttp(topic ATopic, webHook string) IBusHandlerSubscribe {
  23. Hassert(topic != "", "NewHandlerHttpSub(): topic is empty")
  24. Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty")
  25. sf := &MockHandSubHttp{
  26. Topic_: topic,
  27. Name_: AHandlerName(webHook + "_" + rand.Text()),
  28. WebHook_: webHook,
  29. }
  30. return sf
  31. }
  32. // Topic -- возвращает имя топика, на который подписан обработчик
  33. func (sf *MockHandSubHttp) Topic() ATopic {
  34. return sf.Topic_
  35. }
  36. // SetName -- устанавливает имя обработчика
  37. func (sf *MockHandSubHttp) SetName(name AHandlerName) {
  38. sf.block.Lock()
  39. defer sf.block.Unlock()
  40. Hassert(name != "", "HandlerHttpSub.SetName(): name is empty")
  41. sf.Name_ = name
  42. }
  43. // Name -- возвращает уникальное имя обработчика
  44. func (sf *MockHandSubHttp) 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. }