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)));
        }
Esempio n. 2
0
    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
            );
    }
Esempio n. 3
0
        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));;
        }
Esempio n. 7
0
 public virtual Task <Offset> Prepare(AggregateEventTag tag)
 {
     return(Task.FromResult(Offset.NoOffset()));
 }
Esempio n. 8
0
 public Task <Offset> Prepare(AggregateEventTag tag) => Task.FromResult <Offset>(NoOffset.Instance);