// package handler_http_sub -- обработчик подписки по HTTP. package mock_hand_sub_http import ( "crypto/rand" "log" "sync" mKd "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/handler_name" "gitp78su.ipnodns.ru/svi/kern/v4/lev0/defs/topic" mKh "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers" mKs "gitp78su.ipnodns.ru/svi/kern/v4/lev0/kspec" ) // MockHandSubHttp -- обработчик подписки по HTTP. type MockHandSubHttp struct { Name_ *handler_name.AHandlerName // Уникальное имя обработчика Topic_ *topic.ATopic // Имя топика, на который подписан обработчик WebHook_ string // Куда обращаться при запросах BinMsg_ []byte // Последнее бинарное сообщение block sync.RWMutex } // NewMockHandSubHttp -- возвращает новый обработчик подписки по HTTP. func NewMockHandSubHttp(topic *topic.ATopic, webHook string) mKs.IBusHandlerSubscribe { mKh.Hassert(topic.Get() != "", "NewHandlerHttpSub(): topic is empty") mKh.Hassert(webHook != "", "NewHandlerHttpSub(): webHook is empty") sf := &MockHandSubHttp{ Topic_: topic, Name_: mKd.NewHandlerName(webHook + "_" + rand.Text()), WebHook_: webHook, } return sf } // Topic -- возвращает имя топика, на который подписан обработчик. func (sf *MockHandSubHttp) Topic() *topic.ATopic { return sf.Topic_ } // SetName -- устанавливает имя обработчика. func (sf *MockHandSubHttp) SetName(name *handler_name.AHandlerName) { sf.block.Lock() defer sf.block.Unlock() mKh.Hassert(name != nil, "HandlerHttpSub.SetName(): name is empty") sf.Name_ = name } // Name -- возвращает уникальное имя обработчика. func (sf *MockHandSubHttp) Name() *handler_name.AHandlerName { 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_) }