public async Task <long> Publish(IEnumerable <ReadOnlyMemory <byte> > messages)
        {
            Task writeTask;
            long seqNum;

            lock (sync)
            {
                if (disposed)
                {
                    throw new PublisherException($"Cannot write to disposed {nameof(Publisher)}");
                }

                var request = new WriteManyRequest
                {
                    SequenceNumber = sequenceNumber
                };

                request.Messages.AddRange(messages.Select(x => Google.Protobuf.ByteString.CopyFrom(x.Span)));

                writeTask = requestStream.WriteAsync(request);

                seqNum = sequenceNumber++;
            }

            await writeTask;

            return(seqNum);
        }
Beispiel #2
0
        public void Write(WriteManyRequest request)
        {
            lock (sync)
            {
                if (disposed)
                {
                    throw new TopicWriterException($"Cannot write to disposed {nameof(TopicWriter)}");
                }

                var writeResult = topic.Write(request.Messages.Span);
                idMap.Add(new IdPair(request.SequenceNumber, writeResult.LastInsertedIndex));
            }
        }