统一命名空间
大石头 authored at 2019-05-10 16:16:06
1.82 KiB
LeafBrowser
using System;
using System.Collections.Generic;
using System.IO;
using CefSharp;

namespace LeafBrower
{
    internal class MyResponseFilter : IResponseFilter
    {
        private Int32 contentLength = -1;
        public Stream Stream { get; } = new MemoryStream();

        public void SetContentLength(Int32 contentLength)
        {
            this.contentLength = contentLength;
        }

        public FilterStatus Filter(Stream dataIn, out Int64 dataInRead, Stream dataOut, out Int64 dataOutWritten)
        {
            try
            {
                if (dataIn == null)
                {
                    dataInRead = 0;
                    dataOutWritten = 0;

                    return FilterStatus.Done;
                }

                dataInRead = dataIn.Length;
                dataOutWritten = Math.Min(dataInRead, dataOut.Length);

                dataIn.CopyTo(dataOut);
                dataIn.Seek(0, SeekOrigin.Begin);

                var ms = Stream;
                dataIn.CopyTo(ms);

                if (ms.Length == contentLength)
                {
                    ms.Position = 0;

                    return FilterStatus.Done;
                }
                else if (contentLength < 0 || ms.Length < contentLength)
                {
                    dataInRead = dataIn.Length;
                    dataOutWritten = dataIn.Length;

                    return FilterStatus.NeedMoreData;
                }
                else
                {
                    return FilterStatus.Error;
                }
            }
            catch (Exception)
            {
                dataInRead = dataIn.Length;
                dataOutWritten = dataIn.Length;

                return FilterStatus.Done;
            }
        }

        public Boolean InitFilter() => true;

        public void Dispose() { }
    }
}