@@ -12,20 +12,34 @@ namespace ManagedRIOHttpServer
12
12
{
13
13
public sealed class Program
14
14
{
15
+ // Number of 100ns ticks per time unit
16
+ private const long TicksPerMillisecond = 10000 ;
17
+ private const long TicksPerSecond = TicksPerMillisecond * 1000 ;
18
+
15
19
static readonly string headersKeepAliveStr = "HTTP/1.1 200 OK\r \n " +
16
20
"Content-Type: text/plain\r \n " +
17
21
"Content-Length:13\r \n " +
18
22
"Connection:keep-alive\r \n " +
19
23
"Server:-RIO-\r \n " +
20
- "Date:" ;
24
+ "Date:DDD, dd mmm yyyy hh:mm:ss GMT" +
25
+ "\r \n \r \n " ;
21
26
22
- private static byte [ ] _headersBytes = Encoding . UTF8 . GetBytes ( headersKeepAliveStr ) ;
27
+ private static byte [ ] _headersBytes = Encoding . ASCII . GetBytes ( headersKeepAliveStr ) ;
23
28
24
- static readonly string bodyStr = "\r \n \r \n " +
25
- "Hello, World!" ;
29
+ private static readonly string bodyStr = "Hello, World!" ;
26
30
27
31
private static byte [ ] _bodyBytes = Encoding . UTF8 . GetBytes ( bodyStr ) ;
32
+ private static Timer UpdateDateTimer ;
28
33
34
+ static Program ( )
35
+ {
36
+ var start = _headersBytes . Length - 33 ;
37
+ UpdateDateTimer = new Timer ( ( obj ) =>
38
+ {
39
+ var date = DateTime . UtcNow . ToString ( "r" ) ;
40
+ Encoding . ASCII . GetBytes ( date , 0 , date . Length , _headersBytes , start ) ;
41
+ } , null , 0 , 1000 ) ;
42
+ }
29
43
30
44
static void Main ( string [ ] args )
31
45
{
@@ -101,8 +115,6 @@ static async Task ServeSocket(RIOTcpConnection socket)
101
115
102
116
var receiveTask = socket . ReceiveAsync ( receiveBuffer0 , CancellationToken . None ) ;
103
117
104
- var dateBytes = Encoding . UTF8 . GetBytes ( "DDD, dd mmm yyyy hh:mm:ss GMT" ) ;
105
-
106
118
107
119
var loop = 0 ;
108
120
var overflow = 0 ;
@@ -272,18 +284,14 @@ static async Task ServeSocket(RIOTcpConnection socket)
272
284
socket . SendCachedBad ( ) ;
273
285
break ;
274
286
}
275
-
276
- var date = DateTime . UtcNow . ToString ( "r" ) ;
277
- Encoding . UTF8 . GetBytes ( date , 0 , dateBytes . Length , dateBytes , 0 ) ;
278
-
287
+
288
+
279
289
for ( var i = 1 ; i < count ; i ++ )
280
290
{
281
291
socket . QueueSend ( headerBuffer , false ) ;
282
- socket . QueueSend ( new ArraySegment < byte > ( dateBytes ) , false ) ;
283
292
socket . QueueSend ( bodyBuffer , false ) ;
284
293
}
285
294
socket . QueueSend ( headerBuffer , false ) ;
286
- socket . QueueSend ( new ArraySegment < byte > ( dateBytes ) , false ) ;
287
295
// force send if not more ready to recieve/pack
288
296
var nextReady = receiveTask . IsCompleted ;
289
297
socket . QueueSend ( bodyBuffer , ( ! nextReady ) ) ;
@@ -301,27 +309,30 @@ static async Task ServeSocket(RIOTcpConnection socket)
301
309
}
302
310
}
303
311
304
-
305
- public static void LowerCaseSIMD ( byte [ ] data )
306
- {
307
- var A = new Vector < byte > ( 65 ) ; // A
308
- var Z = new Vector < byte > ( 90 ) ; // Z
312
+ //public static void LowerCaseSIMD(ArraySegment<byte> data)
313
+ //{
314
+ // if (data.Offset + data.Count + Vector<byte>.Count < data.Array.Length)
315
+ // {
316
+ // throw new ArgumentOutOfRangeException("Nope");
317
+ // }
318
+ // var A = new Vector<byte>(65); // A
319
+ // var Z = new Vector<byte>(90); // Z
309
320
310
- for ( var o = 0 ; o < data . Length - Vector < byte > . Count ; o += Vector < byte > . Count )
311
- {
312
- var v = new Vector < byte > ( data , o ) ;
313
-
314
- v = Vector . ConditionalSelect (
315
- Vector . BitwiseAnd (
316
- Vector . GreaterThanOrEqual ( v , A ) ,
317
- Vector . LessThanOrEqual ( v , Z )
318
- ) ,
319
- Vector . BitwiseOr ( new Vector < byte > ( 0x20 ) , v ) , // 0010 0000
320
- v
321
- ) ;
322
- v . CopyTo ( data , o ) ;
323
- }
324
- }
321
+ // for (var o = data.Offset ; o < data.Count - Vector<byte>.Count; o += Vector<byte>.Count)
322
+ // {
323
+ // var v = new Vector<byte>(data.Array , o);
324
+
325
+ // v = Vector.ConditionalSelect(
326
+ // Vector.BitwiseAnd(
327
+ // Vector.GreaterThanOrEqual(v, A),
328
+ // Vector.LessThanOrEqual(v, Z)
329
+ // ),
330
+ // Vector.BitwiseOr(new Vector<byte>(0x20), v), // 0010 0000
331
+ // v
332
+ // );
333
+ // v.CopyTo(data.Array , o);
334
+ // }
335
+ // }
325
336
}
326
337
327
338
}
0 commit comments