public override async Task DuplexStreaming( IAsyncStreamReader <HelloRequest> requestStream, IServerStreamWriter <HelloResult> responseStream, ServerCallContext context) { var greet = CompatibilityToolsTestExtensions.DeserializeMethodInput <string>(ProtobufMarshallerFactory.Default, context.RequestHeaders); await context.WriteResponseHeadersAsync(CompatibilityToolsTestExtensions.SerializeMethodOutput(ProtobufMarshallerFactory.Default, greet)).ConfigureAwait(false); while (await requestStream.MoveNext(context.CancellationToken).ConfigureAwait(false)) { var message = greet + " " + requestStream.Current.Name + "!"; await responseStream.WriteAsync(new HelloResult { Message = message }).ConfigureAwait(false); } }
public async Task DuplexStreamingNativeCall(string channelName) { var client = new Greeter.GreeterClient(GetChannel(channelName)); var response = new List <string>(); using (var call = client.DuplexStreaming(CompatibilityToolsTestExtensions.SerializeMethodInput(ProtobufMarshallerFactory.Default, "Hello"))) { var responseHeaders = await call.ResponseHeadersAsync.ConfigureAwait(false); CompatibilityToolsTestExtensions.DeserializeMethodOutput <string>(ProtobufMarshallerFactory.Default, responseHeaders).ShouldBe("Hello"); foreach (var name in new[] { "person 1", "person 2" }) { await call.RequestStream.WriteAsync(new HelloRequest { Name = name }); } await call.RequestStream.CompleteAsync(); while (await call.ResponseStream.MoveNext(default))