diff --git a/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs b/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs index 07c80f479..dc307ecd8 100644 --- a/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs +++ b/UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs @@ -13,11 +13,15 @@ public sealed class AnsiEscapeSequenceRequests : Scenario private readonly object _lockAnswers = new (); private readonly Dictionary _answers = new (); + private readonly object _lockErrors = new (); + private readonly Dictionary _errors = new (); + private GraphView _graphView; private ScatterSeries _sentSeries; private ScatterSeries _answeredSeries; private Label _lblSummary; + private Label _lblErrorSummary; public override void Main () { @@ -151,7 +155,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario Y = Pos.Bottom (cbDar), X = Pos.Right (tv), Width = Dim.Fill (), - Height = Dim.Fill (1) + Height = Dim.Fill (2) }; _lblSummary = new () @@ -161,6 +165,13 @@ public sealed class AnsiEscapeSequenceRequests : Scenario Width = Dim.Fill () }; + _lblErrorSummary = new () + { + Y = Pos.Bottom (_lblSummary), + X = Pos.Right (tv), + Width = Dim.Fill () + }; + SetupGraph (); w.Add (lbl); @@ -169,6 +180,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario w.Add (tv); w.Add (_graphView); w.Add (_lblSummary); + w.Add (_lblErrorSummary); return w; } @@ -322,6 +334,21 @@ public sealed class AnsiEscapeSequenceRequests : Scenario return $"Last:{last} U:{unique} T:{total}"; } + private string GetSummaryErrors () + { + if (_errors.Count == 0) + { + return "No errors received yet"; + } + + string last = _errors.Last ().Value; + + int unique = _errors.Values.Distinct ().Count (); + int total = _errors.Count; + + return $"Last:{last} U:{unique} T:{total}"; + } + private void HandleResponse (string response) { lock (_lockAnswers) @@ -330,13 +357,25 @@ public sealed class AnsiEscapeSequenceRequests : Scenario } } + private void HandleResponseError (string response) + { + lock (_lockAnswers) + { + _errors.Add (DateTime.Now, response); + } + } + private void SendDar () { _sends.Add (DateTime.Now); AnsiEscapeSequenceRequest ansiRequest = AnsiEscapeSequenceRequestUtils.CSI_SendDeviceAttributes; if (Application.Driver!.TryWriteAnsiRequest (ansiRequest)) { - HandleResponse (ansiRequest.AnsiEscapeSequenceResponse.Response); + HandleResponse (ansiRequest.AnsiEscapeSequenceResponse?.Response); + } + else + { + HandleResponseError (ansiRequest.AnsiEscapeSequenceResponse?.Response); } } @@ -383,5 +422,8 @@ public sealed class AnsiEscapeSequenceRequests : Scenario { _lblSummary.Text = GetSummary (); _lblSummary.SetNeedsDisplay (); + + _lblErrorSummary.Text = GetSummaryErrors (); + _lblErrorSummary.SetNeedsDisplay (); } }