コード例 #1
0
        static bool TransmitPacketB(byte[] buffer, int length)
        {
            var b = new byte[length];

            for (var i = 0; i < length; ++i)
            {
                b[i] = buffer[i];
            }
            APacketBuffer.Add(b);
            return(true);
        }
コード例 #2
0
        static bool TransmitPacketB(byte[] buffer, int length)
        {
            var b = new byte[length];

            for (var i = 0; i < length; ++i)
            {
                b[i] = buffer[i];
            }
            APacketBuffer.Enqueue(new KeyValuePair <long, byte[]>(Stopwatch.ElapsedMilliseconds + Random.Next(LineLagMin, LineLagMax), b));
            return(true);
        }
コード例 #3
0
        // out of order/duplicate/dropped delivery
        public static void Run()
        {
            AChannel = new Channel(true, Allocator, Release, TransmitPacketA, ReceiveMessageA);
            BChannel = new Channel(false, Allocator, Release, TransmitPacketB, ReceiveMessageB);


            for (var i = 0; i < 1024 * 1024; ++i)
            {
                var b = new byte[1];
                b[0] = (byte)(i & 0x7f);
                AChannel.SendMessage(b, 0, 1);
                b[0] = (byte)(i & 0x7f | 0x80);
                BChannel.SendMessage(b, 0, 1);
            }

            for (var i = 0; i < 10000; ++i)
            {
                AChannel.Update();
                BChannel.Update();


                var bias = Random.Next(1000);
                AChannel.DebugElapsedTimeBias += bias;
                BChannel.DebugElapsedTimeBias += bias;


                if (APacketBuffer.Count > 0)
                {
                    var a   = Random.Next(APacketBuffer.Count);
                    var act = Random.Next(2);
                    if (act == 0)
                    {
                        var buffer = APacketBuffer[a];
                        AChannel.ReceivePacket(buffer, 0, buffer.Length);
                    }
                    else
                    {
                        APacketBuffer.RemoveAt(a);
                    }
                }

                if (APacketBuffer.Count > 1000)
                {
                    APacketBuffer.Clear();
                }

                if (BPacketBuffer.Count > 0)
                {
                    var a   = Random.Next(BPacketBuffer.Count);
                    var act = Random.Next(2);
                    if (act == 0)
                    {
                        var buffer = BPacketBuffer[a];
                        BChannel.ReceivePacket(buffer, 0, buffer.Length);
                    }
                    else
                    {
                        BPacketBuffer.RemoveAt(a);
                    }
                }

                if (BPacketBuffer.Count > 1000)
                {
                    BPacketBuffer.Clear();
                }
            }


            var ac = 0;

            foreach (var a in AReceived)
            {
                for (var i = 0; i < a.Length; ++i)
                {
                    var x = ac + i;
                    var y = (byte)(x & 0x7f | 0x80);
                    if (a[i] != y)
                    {
                        throw new Exception();
                    }
                }
                ac += a.Length;
            }

            var bc = 0;

            foreach (var b in BReceived)
            {
                for (var i = 0; i < b.Length; ++i)
                {
                    var x = bc + i;
                    var y = (byte)(x & 0x7f);
                    if (b[i] != y)
                    {
                        throw new Exception();
                    }
                }
                bc += b.Length;
            }

            if (ac != 1024 * 1024)
            {
                throw new Exception();
            }
            if (bc != 1024 * 1024)
            {
                throw new Exception();
            }
        }