Beispiel #1
0
        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);
            });
        }
Beispiel #2
0
        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);
            });
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }
Beispiel #7
0
        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);
        }