/// <summary> /// May throw exceptions if there are pipe problems. /// </summary> /// <param name="stream"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public static async Task <BuildResponse> ReadAsync(PipeStream stream, CancellationToken cancellationToken) { CompilerServerLogger.Log("Reading response length"); // Read the response length var lengthBuffer = new byte[4]; await BuildProtocolConstants.ReadAllAsync(stream, lengthBuffer, 4, cancellationToken).ConfigureAwait(false); var length = BitConverter.ToUInt32(lengthBuffer, 0); // Read the response CompilerServerLogger.Log("Reading response of length {0}", length); var responseBuffer = new byte[length]; await BuildProtocolConstants.ReadAllAsync(stream, responseBuffer, responseBuffer.Length, cancellationToken).ConfigureAwait(false); using (var reader = new BinaryReader(new MemoryStream(responseBuffer), Encoding.Unicode)) { int returnCode = reader.ReadInt32(); string output = BuildProtocolConstants.ReadLengthPrefixedString(reader); string errorOutput = BuildProtocolConstants.ReadLengthPrefixedString(reader); return(new BuildResponse(returnCode, output, errorOutput)); } }
public static Argument ReadFromBinaryReader(BinaryReader reader) { uint argId = reader.ReadUInt32(); uint argIndex = reader.ReadUInt32(); string value = BuildProtocolConstants.ReadLengthPrefixedString(reader); return(new Argument(argId, argIndex, value)); }
public static CompletedBuildResponse Create(BinaryReader reader) { var returnCode = reader.ReadInt32(); var utf8Output = reader.ReadBoolean(); var output = BuildProtocolConstants.ReadLengthPrefixedString(reader); var errorOutput = BuildProtocolConstants.ReadLengthPrefixedString(reader); return(new CompletedBuildResponse(returnCode, utf8Output, output, errorOutput)); }