Здравствуйте, Lloyd, Вы писали:
L>Это просто конфетка по сравнению с тем, с чем приходится работать. Поставил бы твердую 4+.
Вы не шутите? То есть вы считаете, что это вполне нормально:
1. Поведение. Что это за класс вообще? Вроде Stream (HttpStream), но по сути дела никакой не Stream, а скорее Reader. И то сомнительно -- т.к. в нем и заголовки, и тело запроса в виде строки. Поведение размазано.
2. Парсить в этом Stream HTTP-заголовки (хотя есть класс HttpHeaders, HttpRequestHeaders, HttpResponseHeaders):
Вот:
var contentType = _headers["Content-Type"];
if (!string.IsNullOrWhiteSpace(contentType))
{
foreach (var section in contentType.Split(';'))
{
var parts = section.Split('=');
var name = parts[0].Trim();
switch (name.ToLowerInvariant())
{
case "charset":
BodyEncoding = Encoding.GetEncoding(parts[1].Trim());
break;
}
}
}
и вот:
var isChunked = false;
var chunked = _headers["Transfer-Encoding"];
if (!string.IsNullOrWhiteSpace(chunked))
{
isChunked = true;
}
и вот:
var contentEncoding = _headers["Content-Encoding"];
if (!string.IsNullOrWhiteSpace(contentEncoding))
{
switch (contentEncoding)
{
case "gzip":
...
break;
case "deflate":
...
break;
3. Вот такая конструкция:
return new HttpStream(streamReader, new HttpRequestHeaders(streamReader));
как вам? То есть в HttpStream парсим заголовки, а в HttpRequestHeaders и HttpResponseHeaders читаем поток.
4. При чтении в методе readBody закрываем основной поток. При этом иногда он будет закрыт, а иногда нет:
using (var bodyReader = new StreamReader(stream, BodyEncoding ?? Encoding.UTF8))
5. Как вам функция deChunkeToNewStream? Не находите, что это можно написать намного проще?
6. Как вам функция setPositionToBody? И вообще насколько она уместна, если после заголовка всегда идет body?
Я все таки надеюсь что вы не вдавались в подробности. Неужели и вы так пишите (вроде как у вас неплохая подборка званий)?
Или поставили 4+ как для Junior?