/** Say hello to server. */ public void greet(final String name) { final ClientCall<HelloRequest, HelloReply> call = channel.newCall(GreeterGrpc.METHOD_SAY_HELLO, CallOptions.DEFAULT); final CountDownLatch latch = new CountDownLatch(1); call.start(new Listener<HelloReply>() { @Override public void onHeaders(Metadata headers) { super.onHeaders(headers); String encoding = headers.get(GrpcUtil.MESSAGE_ENCODING_KEY); if (encoding == null) { throw new RuntimeException("No compression selected!"); } } @Override public void onMessage(HelloReply message) { super.onMessage(message); logger.info("Greeting: " + message.getMessage()); latch.countDown(); } @Override public void onClose(Status status, Metadata trailers) { latch.countDown(); if (!status.isOk()) { throw status.asRuntimeException(); } } }, new Metadata()); call.setMessageCompression(true); call.sendMessage(HelloRequest.newBuilder().setName(name).build()); call.request(1); call.halfClose(); Uninterruptibles.awaitUninterruptibly(latch, 100, TimeUnit.SECONDS); }
@Override public <ReqT, RespT> io.grpc.ServerCall.Listener<ReqT> interceptCall( ServerCall<ReqT, RespT> call, Metadata headers, ServerCallHandler<ReqT, RespT> next) { if (serverEncoding) { call.setCompression("fzip"); } call.setMessageCompression(enableServerMessageCompression); Metadata headersCopy = new Metadata(); headersCopy.merge(headers); serverResponseHeaders = headersCopy; return next.startCall(call, headers); }
@Override public void start(io.grpc.ClientCall.Listener<RespT> responseListener, Metadata headers) { super.start(new ClientHeadersCapture<RespT>(responseListener), headers); setMessageCompression(enableClientMessageCompression); }
private ClientHeadersCapture(Listener<RespT> delegate) { super(delegate); }