Reputation: 4225
I am using Protoc 3.0 and have written call back method to read GRPC stream data using java.
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header received" +headers);
super.onHeaders(headers);
}
};
super.start(listener, headers);
}
};
}
};
Now what i am seeing is that once i reach at onHeaders Metohd, program wait for indefinite period of time. Is this normal. How can i resume reading normal stream data once on header method is done?
EDIT-1 So Chaining will be like-
@Override
public <ReqT, RespT> ClientCall<ReqT, RespT> interceptCall(
final MethodDescriptor<ReqT, RespT> method, CallOptions callOptions, Channel next) {
return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
next.newCall(method, callOptions)) {
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header found"+ headers);
super.onHeaders(headers);
}
};
ClientCall.Listener<RespT> listener = new ClientCall.Listener<RespT>() {
@Override
public void onHeaders(Metadata headers) {
System.out.println("Header received" +headers);
super.onHeaders(headers);
}
};
super.start(listener, headers);
}
};
}
};
Upvotes: 0
Views: 198
Reputation: 26394
You are not chaining to responseListener
. You should use SimpleForwardingClientCallListener
for the listener, similar to what you are doing for the call.
@Override
public void start(Listener<RespT> responseListener, Metadata headers) {
responseListener = new SimpleForwardingClientCallListener<RespT>(responseListener) {
...
Upvotes: 1