Beispiel #1
0
        public IAggregator NextAggregator(IXTable source, XDatabaseContext context)
        {
            IAggregatorBuilder builder = null;

            ParseNextOrThrow(
                () => Factories.AggregatorFactory.TryGetBuilder(_scanner.Current.Value, out builder),
                "Aggregator",
                TokenType.FunctionName,
                Factories.AggregatorFactory.SupportedNames);

            _currentlyBuilding.Push(builder);

            // Parse the open paren
            ParseNextOrThrow(() => true, "(", TokenType.OpenParen);

            try
            {
                IAggregator result = builder.Build(source, context);

                // Ensure we've parsed all arguments, and consume the close paren
                ParseNextOrThrow(() => true, ")", TokenType.CloseParen);
                _currentlyBuilding.Pop();

                return(result);
            }
            catch (Exception ex)
            {
                Rethrow(ex);
                return(null);
            }
        }
        public TestMessagesSaga(IAggregatorBuilder states)
        {
            _states = states.InitCall <MessageRequest>((c, i) =>
            {
                var id = Guid.NewGuid();

                Console.WriteLine($"Init saga: {id} - Input: {i}");
                c.SendMessage <MessageRequest>("Service", i);
            })
                      .Error <MessageError>((c, e) =>
            {
                Console.WriteLine($"Init error id: {c.CorrelationId}");
            })
                      .Rollback <MessageRequest>((c, e) =>
            {
                Console.WriteLine($"Rollback finished id: {c.CorrelationId}");
            })
                      .Step <MessageResponse>((c, r) =>
            {
                Console.WriteLine($"Response1 saga: {c.CorrelationId}");
                c.SendMessage <Message1Request>("Service1", new Message1Request());
            })
                      .Error <Message1Error>((c, e) =>
            {
                Console.WriteLine($"Step 1 error id: {c.CorrelationId}");
            })
                      .Rollback <Message1Request>((c, e) =>
            {
                Console.WriteLine($"Rollback step1 id: {c.CorrelationId}");
                c.SendRollback <MessageRequest>("Service", new MessageRequest());
            })
                      .Step <Message1Response>((c, r) =>
            {
                Console.WriteLine($"Response2 saga: {c.CorrelationId}");
                c.SendMessage <Message2Request>("Service2", new Message2Request());
            })
                      .Error <Message2Error>((c, e) =>
            {
                Console.WriteLine($"Step 2 error id: {c.CorrelationId}");
                c.SendRollback <Message1Request>("Service1", new Message1Request());
            })
                      .Rollback <Message2Request>((c, e) =>
            {
                Console.WriteLine($"Rollback step 2 id: {c.CorrelationId}");
            })
                      .Finish <Message2Response>((c, r) =>
            {
                Console.WriteLine($"Finish saga: {c.CorrelationId}");
            });
        }