Esempio n. 1
0
        /// <summary>
        /// Tworzy odpowiedź ze strumienia
        /// </summary>
        /// <param name="stream">Strumień źródłowy</param>
        /// <param name="toDiskDelegate">Funkcja odpalana w wypadku kiedy nalezy zapisać payload na dysk</param>
        public SkResponse(Stream stream, WriteResponseToDiskDelegate toDiskDelegate)
        {
            // pusta odpowiedź
            stream.Seek(0, SeekOrigin.Begin);
            if (stream.Length == 0)
            {
                throw new Exception("Empty response!");
            }

            var sr = new StreamReader(stream, Encoding.Default, false, 64, true);

            // parsuj pierwszą linię
            string firstLine  = sr.ReadLine();
            var    headerLine = firstLine.Split(' ');

            statusCode  = int.Parse(headerLine[1]);
            ReasonPhase = string.Join(" ", headerLine.Skip(2));
            long headerEnd = firstLine.Length + 2;

            string line;

            do
            {
                // parsuj kolejne linie zawierające nagłówki. Jeśli jest pust to oznacza koniec i start paylaodu
                line = sr.ReadLine();
                if (string.IsNullOrEmpty(line))
                {
                    Debug.WriteLine(stream.Position);
                    break;
                }
                var separated = line.Split(new string[] { ": " }, StringSplitOptions.None);
                headers.Add(separated[0], separated[1]);
                headerEnd += line.Length + 2;
            } while (true);

            // "zgub" ostatnie łamanuie linii
            headerEnd += 2;

            Viewable = CheckMimeToDisplay();

            // jeśli nie nadaje się do wyświetlenia zapisz na dysk
            if (!Viewable)
            {
                // sam paylaod, bez nagłówków
                stream.Seek(headerEnd, SeekOrigin.Begin);
                if (toDiskDelegate != null)
                {
                    toDiskDelegate(stream);
                }
            }
            else
            {
                PayloadString = sr.ReadToEnd();
            }
        }
        /// <summary>
        /// Tworzy odpowiedź ze strumienia
        /// </summary>
        /// <param name="stream">Strumień źródłowy</param>
        /// <param name="toDiskDelegate">Funkcja odpalana w wypadku kiedy nalezy zapisać payload na dysk</param>
        public SkResponse(Stream stream, WriteResponseToDiskDelegate toDiskDelegate)
        {
            // pusta odpowiedź
            stream.Seek(0, SeekOrigin.Begin);
            if (stream.Length == 0)
            {
                throw new Exception("Empty response!");
            }

            var sr = new StreamReader(stream, Encoding.Default, false, 64, true);

            // parsuj pierwszą linię
            string firstLine = sr.ReadLine();
            var headerLine = firstLine.Split(' ');
            statusCode = int.Parse(headerLine[1]);
            ReasonPhase = string.Join(" ", headerLine.Skip(2));
            long headerEnd = firstLine.Length + 2;

            string line;
            do
            {
                // parsuj kolejne linie zawierające nagłówki. Jeśli jest pust to oznacza koniec i start paylaodu
                line = sr.ReadLine();
                if (string.IsNullOrEmpty(line))
                {
                    Debug.WriteLine(stream.Position);
                    break;
                }
                var separated = line.Split(new string[] { ": " }, StringSplitOptions.None);
                headers.Add(separated[0], separated[1]);
                headerEnd += line.Length + 2;

            } while (true);

            // "zgub" ostatnie łamanuie linii
            headerEnd += 2;

            Viewable = CheckMimeToDisplay();

            // jeśli nie nadaje się do wyświetlenia zapisz na dysk
            if (!Viewable)
            {
                // sam paylaod, bez nagłówków
                stream.Seek(headerEnd, SeekOrigin.Begin);
                if(toDiskDelegate != null)
                    toDiskDelegate(stream);
            }
            else
            {
                PayloadString = sr.ReadToEnd();
            }
        }