serv_subscribe_buffer.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // package serv_subscribe_buffer -- сервер подписки с буфером хранения
  2. package serv_subscribe_buffer
  3. import (
  4. "fmt"
  5. "p78git.ddns.net/svi/gobus/pkg/alias"
  6. "p78git.ddns.net/svi/gobus/pkg/net/netapi"
  7. "p78git.ddns.net/svi/gobus/pkg/net/cleint_proxy"
  8. "p78git.ddns.net/svi/gobus/pkg/types"
  9. )
  10. // ServSubscribeBuffer -- буферизованная подписка (на случай временного отключения клиента)
  11. type ServSubscribeBuffer struct {
  12. serv types.IService
  13. dictTopic types.IDictTopic
  14. }
  15. // NewServSubscribeBuffer -- возвращает новый сервер буферизованной подписки
  16. func NewServSubscribeBuffer(serv types.IService) (*ServSubscribeBuffer, error) {
  17. if serv == nil {
  18. return nil, fmt.Errorf("NewServSubscribeBuffer(): IService==nil")
  19. }
  20. sf := &ServSubscribeBuffer{
  21. serv: serv,
  22. dictTopic: serv.DictTopic(),
  23. }
  24. return sf, nil
  25. }
  26. // SubscribeBuffer -- обслуживает буферизованные попдиски
  27. func (sf *ServSubscribeBuffer) SubscribeBuffer(req *netapi.BuffRequest, serv netapi.GoBus_SubscribeBufferServer) error {
  28. clientProxy, err := cleint_proxy.NewClientProxy(alias.ClientName(req.ClientName), alias.TopicName(req.Sample))
  29. if err != nil {
  30. return fmt.Errorf("ServSubscribe.Subscribe(): in create ClientProxy, err=\n\t%w", err)
  31. }
  32. sf.dictTopic.Subscribe(clientProxy)
  33. return nil
  34. }