static NetworkIO() { ClientEngine.MainLoop.QueueTimeout(TimeSpan.FromMilliseconds(100), delegate { lock (receiveQueue) { while (receiveQueue.Count > 0) { QueuedIO io = receiveQueue.Peek(); if (io.rateLimiter.TryProcess(io.buffer.Length)) { ReceiveQueuedAsync(receiveQueue.Dequeue()); } else { break; } } } lock (sendQueue) { while (sendQueue.Count > 0) { QueuedIO io = sendQueue.Peek(); if (io.rateLimiter.TryProcess(io.buffer.Length)) { SendQueuedAsync(sendQueue.Dequeue()); } else { break; } } } return(true); }); }
static NetworkIO() { IOLoop.QueueTimeout(TimeSpan.FromMilliseconds(100), delegate { while (receiveQueue.Count > 0) { QueuedIO io = receiveQueue.Peek(); if (io.rateLimiter.TryProcess(io.count)) { ReceiveQueuedAsync(receiveQueue.Dequeue()); } else { break; } } while (sendQueue.Count > 0) { QueuedIO io = sendQueue.Peek(); if (io.rateLimiter.TryProcess(io.count)) { SendQueuedAsync(sendQueue.Dequeue()); } else { break; } } return(true); }); }
public void Day5_PartII_Samples(int[] program, int[] input, int[] output) { var io = new QueuedIO(new Queue <int>(input), new Queue <int>()); var interpreter = new ThermalEnvironmentSupervisionTerminal(program, io); interpreter.Run(); Assert.Empty(io.Input); Assert.Equal(output, io.Output); }
public void Day5_IO_Write_Samples() { var program = new[] { 4, 2, 99 }; var io = new QueuedIO(new Queue <int>(), new Queue <int>()); var interpreter = new ThermalEnvironmentSupervisionTerminal(program, io); interpreter.Run(); Assert.Equal(new[] { 99 }, io.Output); }
static async void SendQueuedAsync(QueuedIO io) { try { var result = await io.connection.SendAsync(io.buffer, io.offset, io.count).ConfigureAwait(false); io.tcs.SetResult(result); } catch (Exception ex) { io.tcs.SetException(ex); } }
static async void ReceiveQueuedAsync(QueuedIO io) { try { int result = await io.connection.ReceiveAsync(io.buffer).ConfigureAwait(false); io.tcs.SetResult(result); } catch (Exception ex) { io.tcs.SetException(ex); } }
public void Day5_IO_Read_Samples() { var program = new[] { 3, 1, 99 }; var io = new QueuedIO(new Queue <int>(new [] { 42 }), new Queue <int>()); var interpreter = new ThermalEnvironmentSupervisionTerminal(program, io); interpreter.Run(); Assert.Empty(io.Input); Assert.Equal(new[] { 3, 42, 99 }, program); }