/** Request funnel for all bidirectional streaming requests. */ <RequestT, ResponseT> ApiStreamObserver<RequestT> streamRequest( ApiStreamObserver<ResponseT> responseObserverT, BidiStreamingCallable<RequestT, ResponseT> callable) { Preconditions.checkState(!closed, "Firestore client has already been closed"); return callable.bidiStreamingCall(responseObserverT); }
ClientStream<StreamingPullRequest> initClientStream = stub.streamingPullCallable() .splitCall( responseObserver, GrpcCallContext.createDefault().withChannelAffinity(channelAffinity));
/** Send requests to the server and listens to responses. */ public ClientStream<RequestT> splitCall( ResponseObserver<ResponseT> responseObserver, ApiCallContext context) { return internalCall( responseObserver, new ClientStreamReadyObserver<RequestT>() { @Override public void onReady(ClientStream<RequestT> stream) { // no op } }, context); }
/** * Create a bidirectional streaming callable object with grpc-specific functionality. Designed for * use by generated code. * * @param innerCallable the callable that performs the work * @param streamingCallSettings {@link StreamingCallSettings} to configure the method-level * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link BidiStreamingCallable} callable object. */ public static <RequestT, ResponseT> BidiStreamingCallable<RequestT, ResponseT> createBidiStreamingCallable( BidiStreamingCallable<RequestT, ResponseT> innerCallable, StreamingCallSettings<RequestT, ResponseT> streamingCallSettings, ClientContext clientContext) { return innerCallable.withDefaultCallContext(FakeCallContext.create(clientContext)); }
/** * Send requests and iterate over server responses. * * <p>This returns a live stream that must either be fully consumed or cancelled. Example usage: * * <pre>{@code * BidiStream<String, String> stream = bidiStreamingCallable.call() * for (String s : stream) { * if ("needle".equals(s)) { * // Cancelling the stream will cause `hasNext()` to return false on the next iteration, * // naturally breaking the loop. * stream.cancel(); * } * stream.send(s); * } * }</pre> */ public BidiStream<RequestT, ResponseT> call() { return call((ApiCallContext) null); }
/** Listens to server responses and send requests when the network is free. */ public void call( final BidiStreamObserver<RequestT, ResponseT> bidiObserver, ApiCallContext context) { internalCall( bidiObserver, new ClientStreamReadyObserver<RequestT>() { @Override public void onReady(ClientStream<RequestT> stream) { bidiObserver.onReady(stream); } }, context); }
/** * Create a bidirectional streaming callable object with grpc-specific functionality. Designed for * use by generated code. * * @param grpcCallSettings the gRPC call settings * @param streamingCallSettings {@link StreamingCallSettings} to configure the method-level * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link BidiStreamingCallable} callable object. */ @BetaApi("The surface for streaming is not stable yet and may change in the future.") public static <RequestT, ResponseT> BidiStreamingCallable<RequestT, ResponseT> createBidiStreamingCallable( GrpcCallSettings<RequestT, ResponseT> grpcCallSettings, StreamingCallSettings<RequestT, ResponseT> streamingCallSettings, ClientContext clientContext) { BidiStreamingCallable<RequestT, ResponseT> callable = new GrpcDirectBidiStreamingCallable<>(grpcCallSettings.getMethodDescriptor()); callable = new GrpcExceptionBidiStreamingCallable<>(callable, ImmutableSet.<StatusCode.Code>of()); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Send requests and iterate over server responses. * * <p>This returns a live stream that must either be fully consumed or cancelled. Example usage: * * <pre>{@code * BidiStream<String, String> stream = bidiStreamingCallable.call() * for (String s : stream) { * if ("needle".equals(s)) { * // Cancelling the stream will cause `hasNext()` to return false on the next iteration, * // naturally breaking the loop. * stream.cancel(); * } * stream.send(s); * } * }</pre> */ public BidiStream<RequestT, ResponseT> call() { return call((ApiCallContext) null); }
@Test public void streamingRecognize() throws Exception { byte[] audioBytes = Resources.toByteArray(new URL("https://storage.googleapis.com/gapic-toolkit/hello.flac")); StreamingRecognitionConfig streamingConfig = StreamingRecognitionConfig.newBuilder().setConfig(config()).build(); ResponseApiStreamingObserver<StreamingRecognizeResponse> responseObserver = new ResponseApiStreamingObserver<>(); ApiStreamObserver<StreamingRecognizeRequest> requestObserver = speechClient.streamingRecognizeCallable().bidiStreamingCall(responseObserver); // The first request must **only** contain the audio configuration: requestObserver.onNext( StreamingRecognizeRequest.newBuilder().setStreamingConfig(streamingConfig).build()); // Subsequent requests must **only** contain the audio data. requestObserver.onNext( StreamingRecognizeRequest.newBuilder() .setAudioContent(ByteString.copyFrom(audioBytes)) .build()); // Mark transmission as completed after sending the data. requestObserver.onCompleted(); List<StreamingRecognizeResponse> responses = responseObserver.future().get(); Truth.assertThat(responses.size()).isGreaterThan(0); Truth.assertThat(responses.get(0).getResultsCount()).isGreaterThan(0); Truth.assertThat(responses.get(0).getResults(0).getAlternativesCount()).isGreaterThan(0); String text = responses.get(0).getResults(0).getAlternatives(0).getTranscript(); Truth.assertThat(text).isEqualTo("hello"); }
/** Listens to server responses and send requests when the network is free. */ public void call( final BidiStreamObserver<RequestT, ResponseT> bidiObserver, ApiCallContext context) { internalCall( bidiObserver, new ClientStreamReadyObserver<RequestT>() { @Override public void onReady(ClientStream<RequestT> stream) { bidiObserver.onReady(stream); } }, context); }
/** * Create a bidirectional streaming callable object with grpc-specific functionality. Designed for * use by generated code. * * @param grpcCallSettings the gRPC call settings * @param streamingCallSettings {@link StreamingCallSettings} to configure the method-level * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link BidiStreamingCallable} callable object. */ @BetaApi("The surface for streaming is not stable yet and may change in the future.") public static <RequestT, ResponseT> BidiStreamingCallable<RequestT, ResponseT> createBidiStreamingCallable( GrpcCallSettings<RequestT, ResponseT> grpcCallSettings, StreamingCallSettings<RequestT, ResponseT> streamingCallSettings, ClientContext clientContext) { BidiStreamingCallable<RequestT, ResponseT> callable = new GrpcDirectBidiStreamingCallable<>(grpcCallSettings.getMethodDescriptor()); callable = new GrpcExceptionBidiStreamingCallable<>(callable, ImmutableSet.<StatusCode.Code>of()); callable = new TracedBidiCallable<>( callable, clientContext.getTracerFactory(), getSpanName(grpcCallSettings.getMethodDescriptor())); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
call(bidiObserver, null);
@Test @SuppressWarnings("all") public void streamingRecognizeTest() throws Exception { StreamingRecognizeResponse expectedResponse = StreamingRecognizeResponse.newBuilder().build(); mockSpeech.addResponse(expectedResponse); StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build(); MockStreamObserver<StreamingRecognizeResponse> responseObserver = new MockStreamObserver<>(); BidiStreamingCallable<StreamingRecognizeRequest, StreamingRecognizeResponse> callable = client.streamingRecognizeCallable(); ApiStreamObserver<StreamingRecognizeRequest> requestObserver = callable.bidiStreamingCall(responseObserver); requestObserver.onNext(request); requestObserver.onCompleted(); List<StreamingRecognizeResponse> actualResponses = responseObserver.future().get(); Assert.assertEquals(1, actualResponses.size()); Assert.assertEquals(expectedResponse, actualResponses.get(0)); }
client.streamingRecognizeCallable().splitCall(responseObserver);
/** Send requests to the server and listens to responses. */ public ClientStream<RequestT> splitCall( ResponseObserver<ResponseT> responseObserver, ApiCallContext context) { return internalCall( responseObserver, new ClientStreamReadyObserver<RequestT>() { @Override public void onReady(ClientStream<RequestT> stream) { // no op } }, context); }
call(bidiObserver, null);
@Test @SuppressWarnings("all") public void streamingRecognizeTest() throws Exception { StreamingRecognizeResponse expectedResponse = StreamingRecognizeResponse.newBuilder().build(); mockSpeech.addResponse(expectedResponse); StreamingRecognizeRequest request = StreamingRecognizeRequest.newBuilder().build(); MockStreamObserver<StreamingRecognizeResponse> responseObserver = new MockStreamObserver<>(); BidiStreamingCallable<StreamingRecognizeRequest, StreamingRecognizeResponse> callable = client.streamingRecognizeCallable(); ApiStreamObserver<StreamingRecognizeRequest> requestObserver = callable.bidiStreamingCall(responseObserver); requestObserver.onNext(request); requestObserver.onCompleted(); List<StreamingRecognizeResponse> actualResponses = responseObserver.future().get(); Assert.assertEquals(1, actualResponses.size()); Assert.assertEquals(expectedResponse, actualResponses.get(0)); }
return splitCall(responseObserver, null);
@Override public ClientStream<RequestT> internalCall( final ResponseObserver<ResponseT> responseObserver, ClientStreamReadyObserver<RequestT> onReady, ApiCallContext context) { return innerCallable.internalCall( new ExceptionResponseObserver<>(responseObserver, exceptionFactory), onReady, context); } }