示例#1
0
        /// <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));
            }
        }
示例#2
0
            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));
            }
示例#3
0
        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));
        }