Simplify request responses handling.

This commit is contained in:
BDisp
2024-11-10 19:59:34 +00:00
parent f51fbbe5ed
commit 089f7569fd
3 changed files with 21 additions and 62 deletions

View File

@@ -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

View File

@@ -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));

View File

@@ -394,34 +394,12 @@ internal class NetEvents : IDisposable
return;
}
if (seqReqStatus is { })
{
//HandleRequestResponseEvent (c1Control, code, values, terminating);
//if (seqReqStatus is { })
//{
// HandleRequestResponseEvent (c1Control, code, values, terminating);
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;
}
// return;
//}
if (newConsoleKeyInfo != default)
{