public static void WriteMessage <T>(Stream stream, T message, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null) where T : class, IMessage { compressionProviders = compressionProviders ?? new List <ICompressionProvider> { new GzipCompressionProvider(CompressionLevel.Fastest) }; var resolvedProviders = ResolveProviders(compressionProviders); var pipeWriter = PipeWriter.Create(stream); var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageAcceptEncodingHeader] = compressionEncoding; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext( httpContext: httpContext, compressionProviders: resolvedProviders, responseCompressionAlgorithm: compressionEncoding); serverCallContext.Initialize(); pipeWriter.WriteMessageAsync(message, serverCallContext, (r, c) => c.Complete(r.ToByteArray()), canFlush: true).GetAwaiter().GetResult(); stream.Seek(0, SeekOrigin.Begin); }
public static async Task <T> AssertReadMessageAsync <T>(Stream stream, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null) where T : IMessage, new() { compressionProviders = compressionProviders ?? new List <ICompressionProvider> { new GzipCompressionProvider(CompressionLevel.Fastest) }; var pipeReader = PipeReader.Create(stream); var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageEncodingHeader] = compressionEncoding; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext( httpContext: httpContext, serviceOptions: new GrpcServiceOptions { ResponseCompressionAlgorithm = compressionEncoding, CompressionProviders = compressionProviders }); var messageData = await pipeReader.ReadSingleMessageAsync(serverCallContext).AsTask().DefaultTimeout(); var message = new T(); message.MergeFrom(messageData); return(message); }
public static async Task <T?> AssertReadStreamMessageAsync <T>(PipeReader pipeReader, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null) where T : class, IMessage, new() { compressionProviders = compressionProviders ?? new List <ICompressionProvider> { new GzipCompressionProvider(CompressionLevel.Fastest) }; var resolvedProviders = ResolveProviders(compressionProviders); var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageEncodingHeader] = compressionEncoding; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext( httpContext: httpContext, serviceOptions: new GrpcServiceOptions { ResponseCompressionAlgorithm = compressionEncoding, ResolvedCompressionProviders = resolvedProviders }); var message = await pipeReader.ReadStreamMessageAsync <T>(serverCallContext, Deserialize <T>).AsTask().DefaultTimeout(); return(message); }
public static void WriteMessage <T>(Stream stream, T message, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null, Func <PipeWriter, PipeWriter>?pipeWriterWrapper = null) where T : class, IMessage { compressionProviders = compressionProviders ?? DefaultProviders; var pipeWriter = PipeWriter.Create(stream); if (pipeWriterWrapper != null) { pipeWriter = pipeWriterWrapper(pipeWriter); } var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageAcceptEncodingHeader] = compressionEncoding; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext( httpContext: httpContext, compressionProviders: compressionProviders, responseCompressionAlgorithm: compressionEncoding); serverCallContext.Initialize(); pipeWriter.WriteStreamedMessageAsync(message, serverCallContext, (r, c) => c.Complete(r.ToByteArray())).GetAwaiter().GetResult(); stream.Seek(0, SeekOrigin.Begin); }
public static async Task <T?> AssertReadStreamMessageAsync <T>(PipeReader pipeReader, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null) where T : class, IMessage, new() { compressionProviders = compressionProviders ?? DefaultProviders; var httpContext = new DefaultHttpContext(); httpContext.Request.Headers[GrpcProtocolConstants.MessageEncodingHeader] = compressionEncoding; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext( httpContext: httpContext, compressionProviders: compressionProviders, responseCompressionAlgorithm: compressionEncoding); var message = await pipeReader.ReadStreamMessageAsync <T>(serverCallContext, Deserialize <T>).AsTask().DefaultTimeout(); return(message); }
public static async Task <T?> AssertReadStreamMessageAsync <T>(PipeReader pipeReader, string?compressionEncoding = null, List <ICompressionProvider>?compressionProviders = null) where T : class, IMessage, new() { compressionProviders = compressionProviders ?? new List <ICompressionProvider> { new GzipCompressionProvider(CompressionLevel.Fastest) }; var serverCallContext = HttpContextServerCallContextHelper.CreateServerCallContext(serviceOptions: new GrpcServiceOptions { ResponseCompressionAlgorithm = compressionEncoding, CompressionProviders = compressionProviders }); var messageData = await pipeReader.ReadStreamMessageAsync(serverCallContext).AsTask().DefaultTimeout(); if (messageData == null) { return(default);