Esempio n. 1
0
 public void StartDuplexStreaming()
 {
     StartCore(call =>
     {
         var clientStreamWriter = new HttpContentClientStreamWriter <TRequest, TResponse>(call);
         var content            = CreatePushStreamContent(call, clientStreamWriter);
         call.StartDuplexStreamingCore(clientStreamWriter, content);
     });
 }
Esempio n. 2
0
        private PushStreamContent <TRequest, TResponse> CreatePushStreamContent(GrpcCall <TRequest, TResponse> call, HttpContentClientStreamWriter <TRequest, TResponse> clientStreamWriter)
        {
            return(new PushStreamContent <TRequest, TResponse>(clientStreamWriter, async requestStream =>
            {
                ValueTask writeTask;
                lock (Lock)
                {
                    Log.SendingBufferedMessages(Logger, BufferedMessages.Count);

                    if (BufferedMessages.Count == 0)
                    {
#if NETSTANDARD2_0
                        writeTask = Task.CompletedTask;
#else
                        writeTask = default;
#endif
                    }
                    else if (BufferedMessages.Count == 1)
                    {
                        writeTask = call.WriteMessageAsync(requestStream, BufferedMessages[0], call.CancellationToken);
                    }
                    else
                    {
                        // Copy messages to a new collection in lock for thread-safety.
                        var bufferedMessageCopy = BufferedMessages.ToArray();
                        writeTask = WriteBufferedMessages(call, requestStream, bufferedMessageCopy);
                    }
                }

                await writeTask.ConfigureAwait(false);

                if (ClientStreamComplete)
                {
                    await call.ClientStreamWriter !.CompleteAsync().ConfigureAwait(false);
                }
            }));
Esempio n. 3
0
 public PushStreamContent(HttpContentClientStreamWriter <TRequest, TResponse> streamWriter)
 {
     Headers.ContentType = GrpcProtocolConstants.GrpcContentTypeHeaderValue;
     _streamWriter       = streamWriter;
 }
Esempio n. 4
0
 public PushStreamContent(
     HttpContentClientStreamWriter <TRequest, TResponse> streamWriter,
     Func <Stream, ValueTask>?startCallback) : this(streamWriter)
 {
     _startCallback = startCallback;
 }
Esempio n. 5
0
 public PushStreamContent(HttpContentClientStreamWriter <TRequest, TResponse> streamWriter, MediaTypeHeaderValue mediaType)
 {
     Headers.ContentType = mediaType;
     _streamWriter       = streamWriter;
 }