package me.dinowernli.grpc.polyglot.server;
import io.grpc.Status;
import io.grpc.stub.StreamObserver;
import polyglot.HelloProto.HelloRequest;
import polyglot.HelloProto.HelloResponse;
import polyglot.HelloServiceGrpc.HelloServiceImplBase;
public class HelloServiceImpl extends HelloServiceImplBase {
private static final long STREAM_SLEEP_MILLIS = 250;
private static final int STREAM_MESSAGES_NUMBER = 8;
@Override
public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseStream) {
responseStream.onNext(HelloResponse.newBuilder()
.setMessage("Hello, " + request.getRecipient())
.build());
responseStream.onCompleted();
}
@Override
public void sayHelloStream(HelloRequest request, StreamObserver<HelloResponse> responseStream) {
for (int i = 0; i < STREAM_MESSAGES_NUMBER; ++i) {
responseStream.onNext(HelloResponse.newBuilder()
.setMessage("Hello, " + request.getRecipient() + ", part " + i)
.build());
try {
Thread.sleep(STREAM_SLEEP_MILLIS);
} catch (InterruptedException e) {
responseStream.onError(Status.ABORTED.asException());
}
}
responseStream.onCompleted();
}
@Override
public StreamObserver<HelloRequest> sayHelloBidi(
final StreamObserver<HelloResponse> responseStream) {
return new StreamObserver<HelloRequest>() {
@Override
public void onNext(HelloRequest request) {
responseStream.onNext(HelloResponse.newBuilder()
.setMessage("Hello, " + request.getRecipient())
.build());
}
@Override
public void onError(Throwable t) {
responseStream.onError(Status.ABORTED.asException());
}
@Override
public void onCompleted() {
responseStream.onCompleted();
}
};
}
}