瀏覽代碼

Simplify request responses handling.

BDisp 8 月之前
父節點
當前提交
089f7569fd

+ 14 - 6
Terminal.Gui/ConsoleDrivers/AnsiEscapeSequence/AnsiEscapeSequenceRequestUtils.cs

@@ -175,11 +175,6 @@ public static class AnsiEscapeSequenceRequestUtils
     /// </summary>
     public static ConsoleKeyInfo []? IncompleteCkInfos { get; set; }
 
-    /// <summary>
-    ///     Represent a response that was requested by an invalid terminator.
-    /// </summary>
-    public static string? InvalidRequestTerminator { get; set; }
-
     /// <summary>
     ///     Decodes an ANSI escape sequence.
     /// </summary>
@@ -348,6 +343,13 @@ public static class AnsiEscapeSequenceRequestUtils
                 {
                     AnsiEscapeSequenceRequests.Remove (seqReqStatus);
 
+                    var ckiString = ToString (cki);
+
+                    lock (seqReqStatus?.AnsiRequest._responseLock!)
+                    {
+                        seqReqStatus.AnsiRequest.RaiseResponseFromInput (ckiString);
+                    }
+
                     return;
                 }
 
@@ -376,7 +378,13 @@ public static class AnsiEscapeSequenceRequestUtils
                         // It's request response that wasn't handled by a valid request terminator
                         System.Diagnostics.Debug.Assert (AnsiEscapeSequenceRequests.Statuses.Count > 0);
 
-                        InvalidRequestTerminator = ToString (cki);
+                        if (AnsiEscapeSequenceRequests.Statuses.TryDequeue (out AnsiEscapeSequenceRequestStatus? result))
+                        {
+                            lock (result.AnsiRequest._responseLock)
+                            {
+                                result.AnsiRequest.RaiseResponseFromInput (ToString (cki));
+                            }
+                        }
                     }
                 }
                 else

+ 2 - 29
Terminal.Gui/ConsoleDrivers/CursesDriver/UnixMainLoop.cs

@@ -245,7 +245,7 @@ internal class UnixMainLoop (ConsoleDriver consoleDriver) : IMainLoopDriver
                     {
                         if (_retries > 1)
                         {
-                            if (AnsiEscapeSequenceRequests.Statuses.TryPeek (out AnsiEscapeSequenceRequestStatus? seqReqStatus) && seqReqStatus.AnsiRequest.AnsiEscapeSequenceResponse is { } && string.IsNullOrEmpty (seqReqStatus.AnsiRequest.AnsiEscapeSequenceResponse.Response))
+                            if (AnsiEscapeSequenceRequests.Statuses.TryPeek (out AnsiEscapeSequenceRequestStatus? seqReqStatus))
                             {
                                 lock (seqReqStatus!.AnsiRequest._responseLock)
                                 {
@@ -301,7 +301,7 @@ internal class UnixMainLoop (ConsoleDriver consoleDriver) : IMainLoopDriver
                                                      out bool isMouse,
                                                      out List<MouseFlags> mouseFlags,
                                                      out Point pos,
-                                                     out AnsiEscapeSequenceRequestStatus seqReqStatus,
+                                                     out AnsiEscapeSequenceRequestStatus? seqReqStatus,
                                                      AnsiEscapeSequenceRequestUtils.ProcessMouseEvent
                                                     );
 
@@ -315,33 +315,6 @@ internal class UnixMainLoop (ConsoleDriver consoleDriver) : IMainLoopDriver
             return;
         }
 
-        if (seqReqStatus is { })
-        {
-            var ckiString = AnsiEscapeSequenceRequestUtils.ToString (cki);
-
-            lock (seqReqStatus.AnsiRequest._responseLock)
-            {
-                seqReqStatus.AnsiRequest.RaiseResponseFromInput (ckiString);
-            }
-
-            return;
-        }
-
-        if (!string.IsNullOrEmpty (AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator))
-        {
-            if (AnsiEscapeSequenceRequests.Statuses.TryDequeue (out AnsiEscapeSequenceRequestStatus? result))
-            {
-                lock (result.AnsiRequest._responseLock)
-                {
-                    result.AnsiRequest.RaiseResponseFromInput (AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator);
-
-                    AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator = null;
-                }
-            }
-
-            return;
-        }
-
         if (newConsoleKeyInfo != default)
         {
             _pollDataQueue!.Enqueue (EnqueueKeyboardEvent (newConsoleKeyInfo));

+ 5 - 27
Terminal.Gui/ConsoleDrivers/NetDriver/NetEvents.cs

@@ -394,34 +394,12 @@ internal class NetEvents : IDisposable
             return;
         }
 
-        if (seqReqStatus is { })
-        {
-            //HandleRequestResponseEvent (c1Control, code, values, terminating);
-
-            var ckiString = AnsiEscapeSequenceRequestUtils.ToString (cki);
-
-            lock (seqReqStatus.AnsiRequest._responseLock)
-            {
-                seqReqStatus.AnsiRequest.RaiseResponseFromInput (ckiString);
-            }
+        //if (seqReqStatus is { })
+        //{
+        //    HandleRequestResponseEvent (c1Control, code, values, terminating);
 
-            return;
-        }
-
-        if (!string.IsNullOrEmpty (AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator))
-        {
-            if (AnsiEscapeSequenceRequests.Statuses.TryDequeue (out AnsiEscapeSequenceRequestStatus? result))
-            {
-                lock (result.AnsiRequest._responseLock)
-                {
-                    result.AnsiRequest.RaiseResponseFromInput (AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator);
-
-                    AnsiEscapeSequenceRequestUtils.InvalidRequestTerminator = null;
-                }
-            }
-
-            return;
-        }
+        //    return;
+        //}
 
         if (newConsoleKeyInfo != default)
         {