private void Initialize(Encoding encoding, RequestInfo request, IEnumerable<object> values, IConverterProvider converterProvider)
{
if (values == null)
{
throw new ArgumentNullException("values");
}
var boundary = Guid.NewGuid().ToString();
Headers.ContentType = String.Format("multipart/mixed; boundary=\"{0}\"", boundary);
_body = new MemoryStream();
Body = new UnclosableStream(_body);
var valueResponses = new List<ResponseInfo>();
using (var writer = new StreamWriter(Body))
{
foreach (var value in values.Where(value => value != null))
{
writer.Write("--{0}\r\n", boundary);
var objectResponse = ObjectResponseInfo<object>.CreateInstance(encoding, request, value.GetType(), value, converterProvider);
valueResponses.Add(objectResponse);
foreach (var header in objectResponse.Headers)
{
switch (header.Name)
{
case "Content-Lenght":
break;
default:
writer.Write("{0}\r\n", header);
break;
}
}
writer.Write("Content-Length:{0}\r\n\r\n", objectResponse.Body.Length);
writer.Flush();
objectResponse.Body.CopyTo(Body);
writer.Flush();
writer.Write("\r\n");
writer.Flush();
}
writer.Write("--{0}--", boundary);
writer.Flush();
}
_body.Seek(0, SeekOrigin.Begin);
ObjectResponses = valueResponses;
}
}