private void DownloadFile(FileLink fileLink, WebClient client)
        {
            Console.WriteLine("File {0} status - started.", fileLink.Name);
            var sppedInBps = _speedInKbps * 1024;

            _timer.Start();
            using (var stream = client.OpenRead(fileLink.HttpAddress))
            {
                var throttledStream = new ThrottledStream(stream, sppedInBps);

                var fileName = _outputPath + fileLink.Name;

                using (var file = File.Create(fileName))
                {
                    var buffer    = new byte[BufferSize];
                    var readCount = throttledStream.Read(buffer, 0, BufferSize);

                    while (readCount > 0)
                    {
                        file.Write(buffer, 0, readCount);
                        readCount = throttledStream.Read(buffer, 0, BufferSize);
                    }
                }
                throttledStream.Close();
            }
            _timer.Stop();
            Console.WriteLine("File {0} status - downloaded in {1} seconds.", fileLink.Name, _timer.ElapsedMilliseconds / 1000);
            _timer.Reset();
        }
Exemple #2
0
        public static void ThrottledStreamRead()
        {
            byte[]    sourceBuffer      = { 0x10, 0x20, 0x30, 0x40, 0x50 };
            byte[]    destinationBuffer = new byte[sourceBuffer.Length + 1];
            const int offset            = 1;
            const int bytesToRead       = 3;

            using (MemoryStream baseStream = new MemoryStream(sourceBuffer))
            {
                const int readSpeed  = 1;
                const int writeSpeed = 1;

                ThrottledStream throttledStream = new ThrottledStream(baseStream, readSpeed, writeSpeed);
                int             bytesRead       = throttledStream.Read(destinationBuffer, offset, bytesToRead);
                Assert.AreEqual(bytesToRead, bytesRead);

                for (int k = 0; k < destinationBuffer.Length; k++)
                {
                    if (offset <= k && k < offset + bytesToRead)
                    {
                        Assert.AreEqual(sourceBuffer[k - offset], destinationBuffer[k]);
                    }
                    else
                    {
                        Assert.AreEqual(default(byte), destinationBuffer[k]);
                    }
                }
            }
        }
        public void TestStreamIntegrity()
        {
            using (Stream tar = new ThrottledStream(new MemoryStream(), 100))
            {
                byte[] buf = DummyData.GenerateOrderedBytes(500);
                tar.Write(buf, 0, buf.Length);
                tar.Seek(0, SeekOrigin.Begin);
                byte[] buf2 = new byte[500];
                tar.Read(buf2, 0, buf2.Length);
                Assert.IsTrue(buf.SequenceEqual(buf2));
            }

            using (Stream tar = new ThrottledStream(new MemoryStream()))
            {
                byte[] buf = DummyData.GenerateOrderedBytes(4096);
                tar.Write(buf, 0, buf.Length);
                tar.Seek(0, SeekOrigin.Begin);
                byte[] buf2 = new byte[4096];
                tar.Read(buf2, 0, buf2.Length);
                Assert.IsTrue(buf.SequenceEqual(buf2));
            }

            using (Stream tar = new ThrottledStream(new MemoryStream(), 77))
            {
                byte[] buf = DummyData.GenerateOrderedBytes(247);
                tar.Write(buf, 0, buf.Length);
                tar.Seek(0, SeekOrigin.Begin);
                byte[] buf2 = new byte[247];
                tar.Read(buf2, 0, buf2.Length);
                Assert.IsTrue(buf.SequenceEqual(buf2));
            }
        }
Exemple #4
0
        private void TestStreamIntegrity(int streamSize, long maximumBytesPerSecond)
        {
            // arrange
            byte[] data       = DummyData.GenerateOrderedBytes(streamSize);
            byte[] copiedData = new byte[streamSize];
            using Stream stream = new ThrottledStream(new MemoryStream(), maximumBytesPerSecond);

            // act
            stream.Write(data, 0, data.Length);
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(copiedData, 0, copiedData.Length);

            // assert
            Assert.AreEqual(streamSize, data.Length);
            Assert.AreEqual(streamSize, copiedData.Length);
            Assert.IsTrue(data.SequenceEqual(copiedData));
        }
        public void TestStreamRead()
        {
            using (Stream src = new ThrottledStream(new MemoryStream(DummyData.GenerateRandomBytes(1024)), 256))
            {
                src.Seek(0, SeekOrigin.Begin);
                byte[] buf   = new byte[256];
                int    read  = 1;
                int    start = Environment.TickCount;

                while (read > 0)
                {
                    read = src.Read(buf, 0, buf.Length);
                }

                int elapsed = Environment.TickCount - start;
                Assert.GreaterOrEqual(elapsed, 4000);
            }
        }
        public void TestStreamRead()
        {
            var size           = 1024;
            var bytesPerSecond = 256; // 256 B/s
            var randomBytes    = DummyData.GenerateRandomBytes(size);

            using Stream src = new ThrottledStream(new MemoryStream(randomBytes), bytesPerSecond);
            src.Seek(0, SeekOrigin.Begin);
            byte[] buf   = new byte[bytesPerSecond];
            int    read  = 1;
            long   start = Environment.TickCount64;

            while (read > 0)
            {
                read = src.Read(buf, 0, buf.Length);
            }

            long elapsed      = Environment.TickCount64 - start;
            var  expectedTime = (size / bytesPerSecond) * 1000;

            Assert.IsTrue(elapsed >= expectedTime);
        }