コード例 #1
0
        T BuildResponse(SocketConnection sc)
        {
            byte[] responseBuffer = sc.GetDataBuffer();

            // Timeout occured
            if (responseBuffer.Length == 0)
            {
                throw new ClientException("Timeout");
            }

            // Create memorystream for deserialization purposes:
            // - skip the first 4 bytes (length (l) + control byte (cb))
            // - read up to boundaryMarker minus 7 (= l + cb + crlf)
            using (var ms = new MemoryStream(responseBuffer, 1, responseBuffer.Length - 1))
                using (var reader = new StreamReader(ms))
                {
                    var controlChar = responseBuffer[0];

                    switch (controlChar)
                    {
                    case WireFormat.SuccessControlChar:
                        return(serializer.Deserialize(ms));

                    case WireFormat.ErrorControlChar:
                        throw new ClientException(reader.ReadToEnd());

                    default:
                        throw new ClientException("Unknown control character detected");
                    }
                }
        }