コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);