public Source <KeyValuePair <E, Offset>, NotUsed> EventStream <E>( AggregateEventTag aggregateTag, string persistenceId, Offset fromOffset = null, Offset toOffset = null ) where E : AggregateEvent <E> { if (!EventsByPersistenceIdQuery.HasValue) { throw new InvalidOperationException( "No support for streaming events by persistence id" ); } var queries = EventsByPersistenceIdQuery.Value; var tag = aggregateTag.Tag; return(queries.EventsByPersistenceId( persistenceId, fromOffset == null ? 0L : ((Sequence)fromOffset).Value, toOffset == null ? Int64.MaxValue : ((Sequence)toOffset).Value ) .Select(env => KeyValuePair.Create(env.Event as E, env.Offset))); }
public async Task Select( string entityId, long startOffset, long endOffset, Func <KeyValuePair <TE, Offset>, byte[]> func, ActorMaterializer materializer) { var buffer = new byte[1024 * 4]; var result = await WebSocket.ReceiveAsync( new ArraySegment <byte>(buffer), CancellationToken.None ); try { var tag = AggregateEventTag.Of <TE>(); await StreamSource.Invoke( tag, // TODO: check this.. $"{tag.Tag}|{entityId}", Offset.Sequence(startOffset), Offset.Sequence(endOffset) ) .RunForeach((envelope) => { var m = func(envelope); Task.Run(async() => { await WebSocket.SendAsync( new ArraySegment <byte>( m, 0, m.Length ), WebSocketMessageType.Text, true, CancellationToken.None ); }); }, materializer); } catch (Exception ex) { throw; } while (!result.CloseStatus.HasValue) { result = await WebSocket.ReceiveAsync( new ArraySegment <byte>(buffer), CancellationToken.None ); } await WebSocket.CloseAsync( result.CloseStatus.Value, result.CloseStatusDescription, CancellationToken.None ); }
public Source <KeyValuePair <E, Offset>, NotUsed> EventStream <E>(AggregateEventTag aggregateTag, Offset fromOffset) where E : AggregateEvent <E> { if (!EventsByTagQuery.HasValue) { throw new InvalidOperationException("No support for streaming events by tag"); } var queries = EventsByTagQuery.Value; var tag = aggregateTag.Tag; Offset MapStartingOffset(Offset o) => o; var startingOffset = MapStartingOffset(fromOffset); return(queries.EventsByTag(tag, startingOffset) .Select(env => KeyValuePair.Create(env.Event as E, env.Offset))); }
public override Task <Offset> Prepare(AggregateEventTag tag) { using (var con = ReadSideConnectionFactory.Invoke()) { var offset = con.QueryFirstOrDefault <long>(@" select sequence_offset from read_side_offsets where read_side_id = @readSideId and tag = @tag ", new { readSideId = ReadSideId, tag = tag.Tag }); return(Task.FromResult( Offset.Sequence( offset ) )); } }
Source <EventStreamElement <TE>, NotUsed> IShardedEntityRegistry2.EventStream <TE>(AggregateEventTag aggregateTag, string persistenceId, Offset fromOffset, Offset toOffset) { if (!EventsByPersistenceIdQuery.HasValue) { throw new InvalidOperationException( "No support for streaming events by persistence id" ); } var queries = EventsByPersistenceIdQuery.Value; var tag = aggregateTag.Tag; return(queries.EventsByPersistenceId( persistenceId, fromOffset == null ? 0L : ((Sequence)fromOffset).Value, toOffset == null ? Int64.MaxValue : ((Sequence)toOffset).Value ).Select(envelope => (EventStreamElement <TE>)envelope)); }
Source <EventStreamElement <TE>, NotUsed> IShardedEntityRegistry2.EventStream <TE>(AggregateEventTag aggregateTag, Offset fromOffset) { if (!EventsByTagQuery.HasValue) { throw new InvalidOperationException("No support for streaming events by tag"); } var queries = EventsByTagQuery.Value; var tag = aggregateTag.Tag; Offset MapStartingOffset(Offset o) => o; var startingOffset = MapStartingOffset(fromOffset); return(queries.EventsByTag(tag, startingOffset) .Select(envelope => (EventStreamElement <TE>)envelope));; }
public virtual Task <Offset> Prepare(AggregateEventTag tag) { return(Task.FromResult(Offset.NoOffset())); }
public Task <Offset> Prepare(AggregateEventTag tag) => Task.FromResult <Offset>(NoOffset.Instance);