Example #1
0
        public void Start(Func<ArraySegment<byte>, Action<Exception>, TempEnum> write, Action<Exception> end, CancellationToken cancellationToken)
        {
            bodyStream = new BodyStream(write, end, cancellationToken);

            Action start = () =>
            {
                try
                {
                    if (bodyStream.CanSend())
                    {
                        var bytes = encoding.GetBytes(text);
                        var segment = new ArraySegment<byte>(bytes);

                        // Not buffered.
                        bodyStream.SendBytes(segment, null, null);

                        bodyStream.Finish();
                    }
                }
                catch (Exception ex)
                {
                    bodyStream.End(ex);
                }
            };

            bodyStream.Start(start, null);
        }
Example #2
0
        public void BodyStream_calls_dispose_action_when_it_finishes()
        {
            var called = false;
            var bodyStream = new BodyStream((data) => false, null, _=> { }, CancellationToken.None);
            bodyStream.Start(() => { }, () => { called = true; });

            bodyStream.Finish();

            Assert.That(called, Is.True);
        }
Example #3
0
        public void BodyStream_calls_completion()
        {
            var called = false;

            var bodyStream = new BodyStream((data) => false, null, null, CancellationToken.None);
            bodyStream.Start(() => { }, null);

            var bytes = new ArraySegment<byte>(Encoding.UTF8.GetBytes("dada"));

            bodyStream.SendBytes(bytes, null, () => { called = true; });

            Assert.That(called, Is.True);
        }
Example #4
0
        public void BodyStream_calls_on_data_delegate()
        {
            var called = false;
            Func<ArraySegment<byte>, bool> next = (data) =>
            {
                called = true;
                return false;
            };

            var bodyStream = new BodyStream(next, null, null, CancellationToken.None);
            bodyStream.Start(() => { }, null);

            var bytes = new ArraySegment<byte>(Encoding.UTF8.GetBytes("dada"));
            bodyStream.SendBytes(bytes, null, null);

            Assert.That(called, Is.True);
        }
Example #5
0
        public void BodyStream_does_not_send_bytes_while_paused()
        {
            var called = false;

            Func<ArraySegment<byte>, bool> next = (data) =>
            {
                called = true;
                return false;
            };

            var bodyStream = new BodyStream(next, null, null, CancellationToken.None);
            bodyStream.Start(() => { }, null);

            bodyStream.Pause();

            var bytes = new ArraySegment<byte>(Encoding.UTF8.GetBytes("dada"));

            bodyStream.SendBytes(bytes, null, null);

            Assert.That(called, Is.False);
        }
Example #6
0
        public void BodyStream_does_not_send_bytes_while_stopped()
        {
            var called = false;

            Func<ArraySegment<byte>, Action, bool> write = (data, callback) =>
            {
                called = true;
                return false;
            };

            var bodyStream = new BodyStream(write, null, CancellationToken.None);
            bodyStream.Start(() => { }, null);

            bodyStream.Stop();

            var bytes = new ArraySegment<byte>(Encoding.UTF8.GetBytes("dada"));

            bodyStream.SendBytes(bytes, null, null);

            Assert.That(called, Is.False);
        }
Example #7
0
        void Start(Func<ArraySegment<byte>, bool> write, Func<Action, bool> flush, Action<Exception> end, CancellationToken cancellationToken)
        {
            bodyStream = new BodyStream(write, flush, end, cancellationToken);

            Action start = () =>
            {
                try
                {
                    var rangeLength = range.Item2 - range.Item1 + 1;
                    SendFile(rangeLength);
                }
                catch (Exception ex)
                {
                    bodyStream.End(ex);
                }
            };

            Action dispose = () =>
            {
                if (fileStream != null)
                {
                    fileStream.Close();
                    fileStream.Dispose();
                    fileStream = null;
                }
            };

            bodyStream.Start(start, dispose);
        }