Skip to content

Commit 1ac49d9

Browse files
committed
Better date header updating
1 parent d56a876 commit 1ac49d9

File tree

1 file changed

+14
-16
lines changed

1 file changed

+14
-16
lines changed

experimental/ManagedRIOHttpServer/Program.cs

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,25 @@ public sealed class Program
2121
"Content-Length:13\r\n" +
2222
"Connection:keep-alive\r\n" +
2323
"Server:-RIO-\r\n" +
24-
"Date:";
24+
"Date:DDD, dd mmm yyyy hh:mm:ss GMT" +
25+
"\r\n\r\n";
2526

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

28-
static readonly string bodyStr = "\r\n\r\n" +
29-
"Hello, World!";
29+
private static readonly string bodyStr = "Hello, World!";
3030

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

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

3444
static void Main(string[] args)
3545
{
@@ -105,12 +115,9 @@ static async Task ServeSocket(RIOTcpConnection socket)
105115

106116
var receiveTask = socket.ReceiveAsync(receiveBuffer0, CancellationToken.None);
107117

108-
var dateBytes = Encoding.UTF8.GetBytes("DDD, dd mmm yyyy hh:mm:ss GMT");
109-
110118

111119
var loop = 0;
112120
var overflow = 0;
113-
var lastSeconds = 0L;
114121
// need to check for keep alive
115122

116123
while (true)
@@ -278,22 +285,13 @@ static async Task ServeSocket(RIOTcpConnection socket)
278285
break;
279286
}
280287

281-
var now = DateTime.UtcNow;
282-
var ticks = now.Ticks / TicksPerSecond;
283-
if (lastSeconds != ticks) {
284-
lastSeconds = ticks;
285-
var date = now.ToString("r");
286-
Encoding.ASCII.GetBytes(date, 0, dateBytes.Length, dateBytes, 0);
287-
}
288288

289289
for (var i = 1; i < count; i++)
290290
{
291291
socket.QueueSend(headerBuffer, false);
292-
socket.QueueSend(new ArraySegment<byte>(dateBytes), false);
293292
socket.QueueSend(bodyBuffer, false);
294293
}
295294
socket.QueueSend(headerBuffer, false);
296-
socket.QueueSend(new ArraySegment<byte>(dateBytes), false);
297295
// force send if not more ready to recieve/pack
298296
var nextReady = receiveTask.IsCompleted;
299297
socket.QueueSend(bodyBuffer, (!nextReady));

0 commit comments

Comments
 (0)