// package handler_http_sub -- обработчик подписки по HTTP. package mock_hand_sub_http import ( "crypto/rand" "log" "sync" mKa "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" mKt "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" ) // MockHandSubHttp -- обработчик подписки по HTTP. type MockHandSubHttp struct { Name_ *mKa.HandlerName // Уникальное имя обработчика Topic_ *mKa.Topic // Имя топика, на который подписан обработчик WebHook_ string // Куда обращаться при запросах BinMsg_ []byte // Последнее бинарное сообщение block sync.RWMutex } // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP. func NewMockHandSubHttp(topic *mKa.Topic, webHook string) mKt.IBusHandlerSubscribe { mKh.Hassert(topic.Get() != "", "NewHandlerHttpSub(): topic is empty") mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty") sf := &MockHandSubHttp{ Topic_: topic, Name_: mKa.NewHandlerName(webHook + "_" + rand.Text()), WebHook_: webHook, } return sf } // Topic -- возвращает имя топика, на который подписан обработчик. func (sf *MockHandSubHttp) Topic() *mKa.Topic { return sf.Topic_ } // SetName -- устанавливает имя обработчика. func (sf *MockHandSubHttp) SetName(name *mKa.HandlerName) { sf.block.Lock() defer sf.block.Unlock() mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty") sf.Name_ = name } // Name -- возвращает уникальное имя обработчика. func (sf *MockHandSubHttp) Name() *mKa.HandlerName { sf.block.RLock() defer sf.block.RUnlock() return sf.Name_ } // FnBack -- обратный вызов по приходу сообщения. func (sf *MockHandSubHttp) FnBack(binMsg []byte) { sf.block.Lock() defer sf.block.Unlock() log.Printf("HandlerHttpSub.FnBack(): msg=%v\n", string(binMsg)) sf.BinMsg_ = binMsg } // Msg -- возвращает строковое представление хранимого сообщения. func (sf *MockHandSubHttp) Msg() string { sf.block.Lock() defer sf.block.Unlock() return string(sf.BinMsg_) }