// package serv_subscribe_buffer -- сервер подписки с буфером хранения package serv_subscribe_buffer import ( "fmt" "p78git.ddns.net/svi/gobus/pkg/alias" "p78git.ddns.net/svi/gobus/pkg/net/netapi" "p78git.ddns.net/svi/gobus/pkg/net/cleint_proxy" "p78git.ddns.net/svi/gobus/pkg/types" ) // ServSubscribeBuffer -- буферизованная подписка (на случай временного отключения клиента) type ServSubscribeBuffer struct { serv types.IService dictTopic types.IDictTopic } // NewServSubscribeBuffer -- возвращает новый сервер буферизованной подписки func NewServSubscribeBuffer(serv types.IService) (*ServSubscribeBuffer, error) { if serv == nil { return nil, fmt.Errorf("NewServSubscribeBuffer(): IService==nil") } sf := &ServSubscribeBuffer{ serv: serv, dictTopic: serv.DictTopic(), } return sf, nil } // SubscribeBuffer -- обслуживает буферизованные попдиски func (sf *ServSubscribeBuffer) SubscribeBuffer(req *netapi.BuffRequest, serv netapi.GoBus_SubscribeBufferServer) error { clientProxy, err := cleint_proxy.NewClientProxy(alias.ClientName(req.ClientName), alias.TopicName(req.Sample)) if err != nil { return fmt.Errorf("ServSubscribe.Subscribe(): in create ClientProxy, err=\n\t%w", err) } sf.dictTopic.Subscribe(clientProxy) return nil }