浏览代码

Add handling error in the scenario.

BDisp 8 月之前
父节点
当前提交
c8aac60438
共有 1 个文件被更改,包括 44 次插入2 次删除
  1. 44 2
      UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs

+ 44 - 2
UICatalog/Scenarios/AnsiEscapeSequenceRequests.cs

@@ -13,11 +13,15 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
 
 
     private readonly object _lockAnswers = new ();
     private readonly object _lockAnswers = new ();
     private readonly Dictionary<DateTime, string> _answers = new ();
     private readonly Dictionary<DateTime, string> _answers = new ();
+    private readonly object _lockErrors = new ();
+    private readonly Dictionary<DateTime, string> _errors = new ();
+
     private GraphView _graphView;
     private GraphView _graphView;
 
 
     private ScatterSeries _sentSeries;
     private ScatterSeries _sentSeries;
     private ScatterSeries _answeredSeries;
     private ScatterSeries _answeredSeries;
     private Label _lblSummary;
     private Label _lblSummary;
+    private Label _lblErrorSummary;
 
 
     public override void Main ()
     public override void Main ()
     {
     {
@@ -151,7 +155,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
             Y = Pos.Bottom (cbDar),
             Y = Pos.Bottom (cbDar),
             X = Pos.Right (tv),
             X = Pos.Right (tv),
             Width = Dim.Fill (),
             Width = Dim.Fill (),
-            Height = Dim.Fill (1)
+            Height = Dim.Fill (2)
         };
         };
 
 
         _lblSummary = new ()
         _lblSummary = new ()
@@ -161,6 +165,13 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
             Width = Dim.Fill ()
             Width = Dim.Fill ()
         };
         };
 
 
+        _lblErrorSummary = new ()
+        {
+            Y = Pos.Bottom (_lblSummary),
+            X = Pos.Right (tv),
+            Width = Dim.Fill ()
+        };
+
         SetupGraph ();
         SetupGraph ();
 
 
         w.Add (lbl);
         w.Add (lbl);
@@ -169,6 +180,7 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
         w.Add (tv);
         w.Add (tv);
         w.Add (_graphView);
         w.Add (_graphView);
         w.Add (_lblSummary);
         w.Add (_lblSummary);
+        w.Add (_lblErrorSummary);
 
 
         return w;
         return w;
     }
     }
@@ -322,6 +334,21 @@ public sealed class AnsiEscapeSequenceRequests : Scenario
         return $"Last:{last} U:{unique} T:{total}";
         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)
     private void HandleResponse (string response)
     {
     {
         lock (_lockAnswers)
         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 ()
     private void SendDar ()
     {
     {
         _sends.Add (DateTime.Now);
         _sends.Add (DateTime.Now);
         AnsiEscapeSequenceRequest ansiRequest = AnsiEscapeSequenceRequestUtils.CSI_SendDeviceAttributes;
         AnsiEscapeSequenceRequest ansiRequest = AnsiEscapeSequenceRequestUtils.CSI_SendDeviceAttributes;
         if (Application.Driver!.TryWriteAnsiRequest (ansiRequest))
         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.Text = GetSummary ();
         _lblSummary.SetNeedsDisplay ();
         _lblSummary.SetNeedsDisplay ();
+
+        _lblErrorSummary.Text = GetSummaryErrors ();
+        _lblErrorSummary.SetNeedsDisplay ();
     }
     }
 }
 }