package JobServ; import io.grpc.Server; import io.grpc.ServerBuilder; import io.grpc.stub.StreamObserver; import java.io.IOException; import java.util.logging.Logger; public class JobServServer { private static final Logger logger = Logger.getLogger(JobServServer.class.getName()); private Server server; // starts the GRPC API Server private void start() throws IOException { // TODO: this should be passed in from a configuration manager int port = 8448; server = ServerBuilder.forPort(port) .addService(new ShellServerImpl()) .build() .start(); logger.info("Server initialized without tls"); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { // JVM shutdown might break logger functionality // so investigate this.... logger.info("Shutting down server"); JobServServer.this.stop(); } }); } private void stop() { if (server != null) { server.shutdown(); } } // spinlock for main() private void blockUntilShutdown() throws InterruptedException { if (server != null) { server.awaitTermination(); } } // Main function. starts GRPC server and spins until server is shutdown public static void main(String[] args) throws IOException, InterruptedException { final JobServServer server = new JobServServer(); server.start(); server.blockUntilShutdown(); } // wrap around stub code generated by GRPC static class ShellServerImpl extends ShellServerGrpc.ShellServerImplBase { @Override public void getStatus(PIDMessage request, StreamObserver responder) { // TODO: Implement job controller, check request type, do the thing StatusMessage reply = StatusMessage.newBuilder() .setStatusCode(-1) .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void getOutput(PIDMessage request, StreamObserver responder) { // TODO: Implement job controller, get output, do the thing OutputMessage reply = OutputMessage.newBuilder() .setOutput("test data") .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void newJob(NewJobMessage request, StreamObserver responder) { // TODO: Implement job controller, Start Job, do the thing PIDMessage reply = PIDMessage.newBuilder() .setPid(-1) .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void getReturn(PIDMessage request, StreamObserver responder) { // TODO: Implement job controller, get return code ReturnMessage reply = ReturnMessage.newBuilder() .setprocessReturnCode(277) .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void killJob(PIDMessage request, StreamObserver responder) { // TODO: implement job controller, do the thing // TODO: kill job here ReturnMessage reply = ReturnMessage.newBuilder() .setprocessReturnCode(-1) .build(); responder.onNext(reply); responder.onCompleted(); } } }