@@ -14,8 +14,8 @@ public class AnsiRequestScheduler
14
14
private readonly IAnsiResponseParser _parser ;
15
15
16
16
/// <summary>
17
- /// Function for returning the current time. Use in unit tests to
18
- /// ensure repeatable tests.
17
+ /// Function for returning the current time. Use in unit tests to
18
+ /// ensure repeatable tests.
19
19
/// </summary>
20
20
internal Func < DateTime > Now { get ; set ; }
21
21
@@ -54,6 +54,11 @@ public class AnsiRequestScheduler
54
54
55
55
private readonly DateTime _lastRun ;
56
56
57
+ /// <summary>
58
+ /// Creates a new instance.
59
+ /// </summary>
60
+ /// <param name="parser"></param>
61
+ /// <param name="now"></param>
57
62
public AnsiRequestScheduler ( IAnsiResponseParser parser , Func < DateTime > ? now = null )
58
63
{
59
64
_parser = parser ;
@@ -67,11 +72,9 @@ public AnsiRequestScheduler (IAnsiResponseParser parser, Func<DateTime>? now = n
67
72
/// </summary>
68
73
/// <param name="request"></param>
69
74
/// <returns><see langword="true"/> if request was sent immediately. <see langword="false"/> if it was queued.</returns>
70
- public bool SendOrSchedule ( AnsiEscapeSequenceRequest request )
71
- {
72
- return SendOrSchedule ( request , true ) ;
73
- }
74
- private bool SendOrSchedule ( AnsiEscapeSequenceRequest request , bool addToQueue )
75
+ public bool SendOrSchedule ( AnsiEscapeSequenceRequest request ) { return SendOrSchedule ( request , true ) ; }
76
+
77
+ private bool SendOrSchedule ( AnsiEscapeSequenceRequest request , bool addToQueue )
75
78
{
76
79
if ( CanSend ( request , out ReasonCannotSend reason ) )
77
80
{
@@ -105,13 +108,13 @@ private bool SendOrSchedule (AnsiEscapeSequenceRequest request,bool addToQueue)
105
108
106
109
private void EvictStaleRequests ( )
107
110
{
108
- foreach ( var stale in _lastSend . Where ( v => IsStale ( v . Value ) ) . Select ( k => k . Key ) )
111
+ foreach ( string stale in _lastSend . Where ( v => IsStale ( v . Value ) ) . Select ( k => k . Key ) )
109
112
{
110
113
EvictStaleRequests ( stale ) ;
111
114
}
112
115
}
113
116
114
- private bool IsStale ( DateTime dt ) => Now ( ) - dt > _staleTimeout ;
117
+ private bool IsStale ( DateTime dt ) { return Now ( ) - dt > _staleTimeout ; }
115
118
116
119
/// <summary>
117
120
/// Looks to see if the last time we sent <paramref name="withTerminator"/>
@@ -155,14 +158,15 @@ public bool RunSchedule (bool force = false)
155
158
}
156
159
157
160
// Get oldest request
158
- Tuple < AnsiEscapeSequenceRequest , DateTime > ? opportunity = _queuedRequests . MinBy ( r=> r . Item2 ) ;
161
+ Tuple < AnsiEscapeSequenceRequest , DateTime > ? opportunity = _queuedRequests . MinBy ( r => r . Item2 ) ;
159
162
160
163
if ( opportunity != null )
161
164
{
162
165
// Give it another go
163
166
if ( SendOrSchedule ( opportunity . Item1 , false ) )
164
167
{
165
168
_queuedRequests . Remove ( opportunity ) ;
169
+
166
170
return true ;
167
171
}
168
172
}
@@ -172,7 +176,6 @@ public bool RunSchedule (bool force = false)
172
176
return false ;
173
177
}
174
178
175
-
176
179
private void Send ( AnsiEscapeSequenceRequest r )
177
180
{
178
181
_lastSend . AddOrUpdate ( r . Terminator , _ => Now ( ) , ( _ , _ ) => Now ( ) ) ;
@@ -210,23 +213,4 @@ private bool ShouldThrottle (AnsiEscapeSequenceRequest r)
210
213
211
214
return false ;
212
215
}
213
- }
214
-
215
- internal enum ReasonCannotSend
216
- {
217
- /// <summary>
218
- /// No reason given.
219
- /// </summary>
220
- None = 0 ,
221
-
222
- /// <summary>
223
- /// The parser is already waiting for a request to complete with the given terminator.
224
- /// </summary>
225
- OutstandingRequest ,
226
-
227
- /// <summary>
228
- /// There have been too many requests sent recently, new requests will be put into
229
- /// queue to prevent console becoming unresponsive.
230
- /// </summary>
231
- TooManyRequests
232
- }
216
+ }
0 commit comments