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 }