Ejemplo n.º 1
0
        public bool ProcessServiceMessages(string text, IBuildVisitor buildVisitor)
        {
            if (buildVisitor == null)
            {
                throw new ArgumentNullException(nameof(buildVisitor));
            }

            if (string.IsNullOrWhiteSpace(text))
            {
                _log.Trace(() => new [] { new Text("Message is empty.") });
                return(false);
            }

            var processed = false;

            foreach (var message in _serviceMessageParser.ParseServiceMessages(text))
            {
                _log.Trace(() => new[] { new Text("Start message processing "), ToText(message) });

                var flowId = message.GetValue("parent") ?? message.GetValue("flowId") ?? string.Empty;
                if (!_flows.TryGetValue(flowId, out var flow))
                {
                    _log.Trace(() => new[] { new Text($"Create flow {flowId}") });
                    flow = _flowFactory();
                    _flows.Add(flowId, flow);
                }
                else
                {
                    _log.Trace(() => new[] { new Text($"Use existing flow {flowId}") });
                }

                switch (message.Name?.ToLowerInvariant())
                {
                case "flowstarted":
                    _log.Trace(() => new[] { new Text($"Create child flow {flowId}") });
                    _flows[message.GetValue("flowId")] = flow.CreateChild();
                    processed = true;
                    break;

                case "flowfinished":
                    _log.Trace(() => new[] { new Text($"Remove flow {flowId}") });
                    _flows.Remove(flowId);
                    processed = true;
                    break;

                default:
                    var result = flow.ProcessMessage(this, buildVisitor, message);
                    // ReSharper disable once AccessToModifiedClosure
                    _log.Trace(() => new[] { new Text($"Processed: {result}") });
                    processed |= result;
                    break;
                }

                _log.Trace(() => new[] { new Text("Finish message processing "), ToText(message) });
            }

            return(processed);
        }
Ejemplo n.º 2
0
        public bool ProcessMessage(IMessageProcessor processor, IBuildVisitor buildVisitor, IServiceMessage message)
        {
            var processed = false;

            switch (message.Name?.ToLowerInvariant())
            {
            case "message":
                var text = message.GetValue("text");
                if (text != null)
                {
                    var status = message.GetValue("status")?.ToUpperInvariant();
                    switch (status)
                    {
                    case "ERROR":
                        _log.Trace(() => new[] { new Text($"Add error {text}") });
                        buildVisitor.Visit(new BuildError(text));
                        break;

                    case "WARNING":
                        _log.Trace(() => new[] { new Text($"Add warning {text}") });
                        buildVisitor.Visit(new BuildWarning(text));
                        break;
                    }
                }

                var parseInternal = message.GetValue("tc:tags")?.ToLowerInvariant() == "tc:parseservicemessagesinside";
                if (!parseInternal || !processor.ProcessServiceMessages(text, buildVisitor))
                {
                    WriteLine(text);
                }

                processed = true;
                break;

            case "blockopened":
                var blockName = message.GetValue("name");
                _log.Trace(() => new [] { new Text($"Open block {blockName}") });
                WriteLine(blockName);
                _tabs++;
                _tabsString = new string(' ', _tabs *Text.Tab.Value.Length);
                processed   = true;
                break;

            case "blockclosed":
                _log.Trace(() => new[] { new Text("Close block") });
                _tabs--;
                _tabsString = new string(' ', _tabs *Text.Tab.Value.Length);
                processed   = true;
                break;
            }

            return(processed);
        }