Skip to content

Commit cfe0190

Browse files
committed
Only update RFC 1123 date once per second
1 parent 634eb65 commit cfe0190

File tree

1 file changed

+43
-32
lines changed

1 file changed

+43
-32
lines changed

experimental/ManagedRIOHttpServer/Program.cs

Lines changed: 43 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,34 @@ namespace ManagedRIOHttpServer
1212
{
1313
public sealed class Program
1414
{
15+
// Number of 100ns ticks per time unit
16+
private const long TicksPerMillisecond = 10000;
17+
private const long TicksPerSecond = TicksPerMillisecond * 1000;
18+
1519
static readonly string headersKeepAliveStr = "HTTP/1.1 200 OK\r\n" +
1620
"Content-Type: text/plain\r\n" +
1721
"Content-Length:13\r\n" +
1822
"Connection:keep-alive\r\n" +
1923
"Server:-RIO-\r\n" +
20-
"Date:";
24+
"Date:DDD, dd mmm yyyy hh:mm:ss GMT" +
25+
"\r\n\r\n";
2126

22-
private static byte[] _headersBytes = Encoding.UTF8.GetBytes(headersKeepAliveStr);
27+
private static byte[] _headersBytes = Encoding.ASCII.GetBytes(headersKeepAliveStr);
2328

24-
static readonly string bodyStr = "\r\n\r\n" +
25-
"Hello, World!";
29+
private static readonly string bodyStr = "Hello, World!";
2630

2731
private static byte[] _bodyBytes = Encoding.UTF8.GetBytes(bodyStr);
32+
private static Timer UpdateDateTimer;
2833

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+
}
2943

3044
static void Main(string[] args)
3145
{
@@ -101,8 +115,6 @@ static async Task ServeSocket(RIOTcpConnection socket)
101115

102116
var receiveTask = socket.ReceiveAsync(receiveBuffer0, CancellationToken.None);
103117

104-
var dateBytes = Encoding.UTF8.GetBytes("DDD, dd mmm yyyy hh:mm:ss GMT");
105-
106118

107119
var loop = 0;
108120
var overflow = 0;
@@ -272,18 +284,14 @@ static async Task ServeSocket(RIOTcpConnection socket)
272284
socket.SendCachedBad();
273285
break;
274286
}
275-
276-
var date = DateTime.UtcNow.ToString("r");
277-
Encoding.UTF8.GetBytes(date, 0, dateBytes.Length, dateBytes, 0);
278-
287+
288+
279289
for (var i = 1; i < count; i++)
280290
{
281291
socket.QueueSend(headerBuffer, false);
282-
socket.QueueSend(new ArraySegment<byte>(dateBytes), false);
283292
socket.QueueSend(bodyBuffer, false);
284293
}
285294
socket.QueueSend(headerBuffer, false);
286-
socket.QueueSend(new ArraySegment<byte>(dateBytes), false);
287295
// force send if not more ready to recieve/pack
288296
var nextReady = receiveTask.IsCompleted;
289297
socket.QueueSend(bodyBuffer, (!nextReady));
@@ -301,27 +309,30 @@ static async Task ServeSocket(RIOTcpConnection socket)
301309
}
302310
}
303311

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
309320

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+
//}
325336
}
326337

327338
}

0 commit comments

Comments
 (0)