private static Task WriteMessageCoreAsync(this PipeWriter pipeWriter, byte[] messageData, HttpContextServerCallContext serverCallContext, bool flush) { Debug.Assert(serverCallContext.ResponseGrpcEncoding != null); var isCompressed = serverCallContext.CanWriteCompressed() && !string.Equals(serverCallContext.ResponseGrpcEncoding, GrpcProtocolConstants.IdentityGrpcEncoding, StringComparison.Ordinal); if (isCompressed) { messageData = GrpcProtocolHelpers.CompressMessage( serverCallContext.ResponseGrpcEncoding, serverCallContext.ServiceOptions.ResponseCompressionLevel, serverCallContext.ServiceOptions.CompressionProviders, messageData); } WriteHeader(pipeWriter, messageData.Length, isCompressed); pipeWriter.Write(messageData); if (flush) { serverCallContext.HasBufferedMessage = false; return(pipeWriter.FlushAsync().GetAsTask()); } else { // Set flag so buffered message will be written at the end serverCallContext.HasBufferedMessage = true; } return(Task.CompletedTask); }
private static Task WriteMessageCoreAsync(this PipeWriter pipeWriter, byte[] messageData, HttpContextServerCallContext serverCallContext, bool flush) { Debug.Assert(serverCallContext.ResponseGrpcEncoding != null); var isCompressed = serverCallContext.CanWriteCompressed() && !string.Equals(serverCallContext.ResponseGrpcEncoding, GrpcProtocolConstants.IdentityGrpcEncoding, StringComparison.Ordinal); if (isCompressed) { messageData = GrpcProtocolHelpers.CompressMessage( serverCallContext.ResponseGrpcEncoding, serverCallContext.ServiceOptions.ResponseCompressionLevel, serverCallContext.ServiceOptions.CompressionProviders, messageData); } WriteHeader(pipeWriter, messageData.Length, isCompressed); pipeWriter.Write(messageData); if (flush) { var valueTask = pipeWriter.FlushAsync(); if (valueTask.IsCompletedSuccessfully) { // We do this to reset the underlying value task (which happens in GetResult()) valueTask.GetAwaiter().GetResult(); return(Task.CompletedTask); } return(valueTask.AsTask()); } return(Task.CompletedTask); }