Exemplo n.º 1
0
        private bool doReconn(NetworkStream stream, ulong writeCount, ulong readCount)
        {
            Thread thread        = null;
            bool   rereadSucceed = false;

            if (writeCount != _ReadCount)
            {
                thread = new Thread(() => {
                    int n         = (int)writeCount - (int)_ReadCount;
                    rereadSucceed = _Rereader.Reread(stream, n);
                });
                thread.Start();
            }

            if (_WriterCount != readCount)
            {
                if (!_Rewriter.Rewrite(stream, _WriterCount, readCount))
                {
                    return(false);
                }
            }

            if (thread != null)
            {
                thread.Join();
                if (!rereadSucceed)
                {
                    return(false);
                }
            }

            setBaseStream(stream);
            return(true);
        }
Exemplo n.º 2
0
        public void RereaderTest()
        {
            var n = 10000;
            var q = new Queue <byte[]>(n);
            var r = new Rereader();

            for (int i = 0; i < n; i++)
            {
                var b = RandBytes(100);
                using (var ms = new MemoryStream(b)) {
                    r.Reread(ms, b.Length);
                }
                q.Enqueue(b);
            }

            for (var i = 0; i < n; i++)
            {
                var raw    = q.Dequeue();
                var b      = new byte[raw.Length];
                var offset = 0;
                var remind = raw.Length;
                while (remind > 0)
                {
                    var size = rand.Next(remind + 1);
                    if (size == 0)
                    {
                        continue;
                    }
                    r.Pull(b, offset, size);
                    offset = offset + size;
                    remind = remind - size;
                }
                Assert.True(BytesEquals(raw, b));
            }
        }