public IEnumerable <JournalRecord> GetRecords(long fromRecord = 0)
        {
            var endStreamCut = GetEndStreamCut();

            _lastEventReadHandler.Invoke(endStreamCut);

            var request = new ReadEventsRequest
            {
                Scope       = _scope,
                Stream      = _stream,
                ToStreamCut = endStreamCut
            };

            var recordNumber = 0;

            using var call = _client.ReadEvents(request, cancellationToken: _cancellationToken);

            var responseStream = call.ResponseStream;

            while (responseStream.MoveNext(_cancellationToken).GetAwaiter().GetResult())
            {
                if (recordNumber <= fromRecord)
                {
                    continue;
                }
                var @event      = responseStream.Current;
                var bytes       = @event.Event.ToByteArray();
                var savedRecord = (JournalRecord)_serializer.Deserialize(bytes);
                var record      = new JournalRecord(recordNumber++, savedRecord.Written, savedRecord.Command);
                yield return(record);
            }
        }
Esempio n. 2
0
        private static async Task ReadAllEvents()
        {
            var request = new ReadEventsRequest();

            request.Scope  = ScopeName;
            request.Stream = StreamName;

            // read to the current end of the stream
            // without this parameter the reader will block and
            // wait for future events when the end is reached
            request.ToStreamCut = await GetTailStreamCut();

            using var call = _client.ReadEvents(request);
            while (await call.ResponseStream.MoveNext())
            {
                var response = call.ResponseStream.Current;
                Console.WriteLine("---- Event received ------");
                Console.WriteLine("   Payload size: " + response.Event.Length);
                Console.WriteLine("   Position.Description: " + response.Position.Description);
                Console.WriteLine("   EventPointer.Description: " + response.EventPointer.Description);
                Console.WriteLine("   StreamCut.Description: " + response.StreamCut.Description);

                EventPointers.Add(response.EventPointer);
            }
        }
        public IJournalSubscription Subscribe(long @from, Action <JournalRecord> handler)
        {
            var request = new ReadEventsRequest();

            request.Scope  = Config.Current.GetSettings <EngineSettings>().StreamName;
            request.Stream = "mystream";
            var response     = _client.ReadEvents(request);
            var streamReader = response.ResponseStream;
            var sub          = new PravegaJournalSubscription(handler, streamReader);

            sub.Start();
            return(sub);
        }