github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/topic/topicreadercommon/raw_topicreader_stream.go (about)

     1  package topicreadercommon
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/grpcwrapper/rawtopic/rawtopicreader"
     7  )
     8  
     9  type RawTopicReaderStream interface {
    10  	Recv() (rawtopicreader.ServerMessage, error)
    11  	Send(msg rawtopicreader.ClientMessage) error
    12  	CloseSend() error
    13  }
    14  
    15  var _ RawTopicReaderStream = &SyncedStream{}
    16  
    17  type SyncedStream struct {
    18  	m      sync.Mutex
    19  	stream RawTopicReaderStream
    20  }
    21  
    22  func NewSyncedStream(stream RawTopicReaderStream) *SyncedStream {
    23  	return &SyncedStream{
    24  		stream: stream,
    25  	}
    26  }
    27  
    28  func (s *SyncedStream) Recv() (rawtopicreader.ServerMessage, error) {
    29  	// not need synced
    30  	return s.stream.Recv()
    31  }
    32  
    33  func (s *SyncedStream) Send(msg rawtopicreader.ClientMessage) error {
    34  	s.m.Lock()
    35  	defer s.m.Unlock()
    36  
    37  	return s.stream.Send(msg)
    38  }
    39  
    40  func (s *SyncedStream) CloseSend() error {
    41  	s.m.Lock()
    42  	defer s.m.Unlock()
    43  
    44  	return s.stream.CloseSend()
    45  }