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 getStatusDetail(RequestMessage request, StreamObserver responder) { // TODO: Implement job controller, check request type, do the thing JobStatusMessage reply = JobStatusMessage.newBuilder() .setPID(-1) .setProcessStatus(-1) .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void getJobOutput(RequestMessage request, StreamObserver responder) { // TODO: Implement job controller, get output, do the thing OutputMessage reply = OutputMessage.newBuilder() .build(); responder.onNext(reply); responder.onCompleted(); } @Override public void makeNewJob(NewJobMessage request, StreamObserver responder) { // TODO: Implement job controller, Start Job, do the thing JobStatusMessage reply = JobStatusMessage.newBuilder() .setPID(-1) .setProcessStatus(-1) .build(); responder.onNext(reply); responder.onCompleted(); } } }