Exemplo n.º 1
0
 void ReceiveBody()
 {
     try
     {
         _connector.OnNext(true);
         var buf = new byte[9];
         while (!_disconnected)
         {
             if (!Receive(buf, 0, 1))
             {
                 return;
             }
             var packLen = PackUnpack.LengthVUInt(buf, 0);
             if (packLen > 1)
             {
                 if (!Receive(buf, 1, packLen - 1))
                 {
                     return;
                 }
             }
             int o   = 0;
             var len = PackUnpack.UnpackVUInt(buf, ref o);
             if (len > int.MaxValue)
             {
                 throw new InvalidDataException();
             }
             var result = new byte[len];
             if (len != 0)
             {
                 if (!Receive(result, 0, (int)len))
                 {
                     return;
                 }
             }
             _receiver.OnNext(ByteBuffer.NewAsync(result));
         }
     }
     catch (Exception)
     {
         SignalDisconnected();
     }
     SignalDisconnected();
 }
Exemplo n.º 2
0
 public static void RunFastSubject()
 {
     //Observers  My Fast Original Delegate Del+null
     //        0      472     2877      315       43
     //        1      588     3087     1537      314
     //        2     1198     3298     1853     1573
     //        3     1926     3509     2134     1850
     //        4     2208     3718     2972     2182
     Console.WriteLine("FastSubject");
     Console.WriteLine("Observers  My Fast Original Delegate Del+null");
     for (var observers = -1; observers < 5; observers++)
     {
         Console.Write("{0,9} ", observers);
         Stopwatch sw;
         {
             var subj = new FastSubject <int>();
             for (var i = 0; i < observers; i++)
             {
                 subj.Subscribe(new EmptyIntObserver());
             }
             subj.OnNext(0);
             sw = Stopwatch.StartNew();
             for (var i = 0; i < 100000000; i++)
             {
                 subj.OnNext(i);
             }
             Console.Write("{0,8} ", sw.ElapsedMilliseconds);
         }
         {
             var subj = new Subject <int>();
             for (var i = 0; i < observers; i++)
             {
                 subj.Subscribe(new EmptyIntObserver());
             }
             subj.OnNext(0);
             sw = Stopwatch.StartNew();
             for (var i = 0; i < 100000000; i++)
             {
                 subj.OnNext(i);
             }
             Console.Write("{0,8} ", sw.ElapsedMilliseconds);
         }
         {
             Action <int> d = p => { };
             for (var i = 0; i < observers; i++)
             {
                 d += p => { };
             }
             d(0);
             sw = Stopwatch.StartNew();
             for (var i = 0; i < 100000000; i++)
             {
                 d(i);
             }
             Console.Write("{0,8} ", sw.ElapsedMilliseconds);
         }
         {
             Action <int>?d = null;
             for (var i = 0; i < observers; i++)
             {
                 d += p => { };
             }
             {
                 var localD = d;
                 localD?.Invoke(0);
             }
             sw = Stopwatch.StartNew();
             for (var i = 0; i < 100000000; i++)
             {
                 var localD = d;
                 localD?.Invoke(i);
             }
             Console.Write("{0,8} ", sw.ElapsedMilliseconds);
         }
         Console.WriteLine();
     }
 }