serv_subscribe_buffer.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. // package serv_subscribe_buffer -- сервер подписки с буфером хранения
  2. package serv_subscribe_buffer
  3. import (
  4. "fmt"
  5. "p78git.ddns.net/svi/gobus/pkg/net/client_proxy_buffer"
  6. "p78git.ddns.net/svi/gobus/pkg/net/netapi"
  7. "p78git.ddns.net/svi/gobus/pkg/types"
  8. )
  9. // ServSubscribeBuffer -- буферизованная подписка (на случай временного отключения клиента)
  10. type ServSubscribeBuffer struct {
  11. serv types.IService
  12. dictTopic types.IDictTopic
  13. dictProxyBuffer types.IDictClientProxyBuffer
  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. dictProxyBuffer: serv.DictClientProxyBuffer(),
  24. }
  25. return sf, nil
  26. }
  27. // SubscribeBuffer -- обслуживает буферизованные попдиски
  28. func (sf *ServSubscribeBuffer) SubscribeBuffer(req *netapi.BuffRequest, serv netapi.GoBus_SubscribeBufferServer) error {
  29. clientProxy, err := client_proxy_buffer.NewClientProxyBuffer(req)
  30. if err != nil {
  31. return fmt.Errorf("ServSubscribe.Subscribe(): in create ClientProxy, err=\n\t%w", err)
  32. }
  33. sf.dictTopic.Subscribe(clientProxy)
  34. return nil
  35. }