Ejemplo n.º 1
0
        public void 到達保証なしチャンネルランダム受信テスト()
        {
            var ctx = new TestChannelContext();

            using (var control = new UnreliableFlowControl(1, 1, ctx))
            {
                List <byte[]> buf = new List <byte[]>();
                short         id  = 1;
                for (int i = 0; i < 10; i++)
                {
                    buf.Add(GetRandam(2000));
                    control.Send(GetFragments(buf[i], id++, Fragment.Size));
                }
                ctx.ShuffleSentQueue();
                int count = 0;
                while (ctx.Receive(control, out var output))
                {
                    count++;
                    var ret = output.ToBytes();
                    Assert.IsTrue(buf.Any(x => Equals(x, ret)), "指定のデータが含まれている");
                    output.RemoveRef(true);
                }
                Assert.AreEqual(buf.Count, count, "同じ数読み取れている");
            }
        }
Ejemplo n.º 2
0
 public void 到達保証なしチャンネルオーダー受信テスト()
 {
     for (int i = 0; i < 100; i++)
     {
         var ctx    = new TestChannelContext();
         var config = new UnreliableChannelConfig
         {
             Ordered = true,
         };
         using (var control = new UnreliableFlowControl(1, 1, ctx, config))
         {
             List <byte[]> buf = new List <byte[]>();
             short         id  = 1;
             for (int j = 0; j < 200; j++)
             {
                 buf.Add(GetRandam(Fragment.Size - 100 + j));
                 control.Send(GetFragments(buf[j], id++, Fragment.Size));
             }
             ctx.ShuffleSentQueue();
             int prev = -1;
             while (ctx.Receive(control, out var output))
             {
                 var ret = output.ToBytes();
                 Assert.IsTrue(prev < ret.Length);
                 prev = ret.Length;
                 output.RemoveRef(true);
             }
         }
     }
 }
Ejemplo n.º 3
0
 public bool Receive(UnreliableFlowControl control, out List <Fragment> output)
 {
     output = new List <Fragment>();
     while (SentQueue.Count > 0)
     {
         var receive = SentQueue.Dequeue();
         int offset  = 0;
         if (!UnreliableData.TryUnpack(receive, ref offset, out var data))
         {
             Assert.Fail();
         }
         control.Enqueue(data);
         if (control.TryDequeue(output))
         {
             return(true);
         }
     }
     return(false);
 }
Ejemplo n.º 4
0
        public void 到達保証なしチャンネル機能テスト()
        {
            var ctx = new TestChannelContext();

            using (var control = new UnreliableFlowControl(1, 1, ctx))
            {
                var buf = GetRandam(1000);

                foreach (var size in new int[] { Fragment.Size, 100, 10 })
                {
                    var fragments = GetFragments(buf, 1, size);
                    control.Send(fragments);
                    Assert.AreEqual(fragments.Count, ctx.SentQueue.Count, "送信した分割サイズと同じ");

                    Assert.IsTrue(ctx.Receive(control, out var output), "受信データをパース出来なかった");

                    Assert.IsTrue(Equals(buf, output.ToBytes()), "データを受け取れている");

                    output.RemoveRef(true);
                }
            }
        }