github.com/stackb/rules_proto@v0.0.0-20240221195024-5428336c51f1/example/routeguide/scala/RouteGuideServer.scala (about) 1 package example.routeguide.scala 2 3 import java.util.logging.Logger 4 5 import io.grpc.{Server, ServerBuilder} 6 7 import example.routeguide.{RouteGuideGrpc} 8 9 class RouteGuideServer(server: Server) { 10 11 val logger: Logger = Logger.getLogger(classOf[RouteGuideServer].getName) 12 13 def start(): Unit = { 14 server.start() 15 logger.info(s"Server started, listening on ${server.getPort}") 16 sys.addShutdownHook { 17 // Use stderr here since the logger may has been reset by its JVM shutdown hook. 18 System.err.println("*** shutting down gRPC server since JVM is shutting down") 19 stop() 20 System.err.println("*** server shut down") 21 } 22 () 23 } 24 25 def stop(): Unit = { 26 server.shutdown() 27 } 28 29 /** 30 * Await termination on the main thread since the grpc library uses daemon threads. 31 */ 32 def blockUntilShutdown(): Unit = { 33 server.awaitTermination() 34 } 35 } 36 37 object RouteGuideServer extends App { 38 val features = RouteGuideUtil.parseFeatures(RouteGuideUtil.defaultFeatureFile) 39 40 val server = new RouteGuideServer( 41 ServerBuilder 42 .forPort(50056) 43 .addService( 44 RouteGuideGrpc.bindService( 45 new RouteGuideService(features), 46 scala.concurrent.ExecutionContext.global 47 ) 48 ) 49 .build() 50 ) 51 server.start() 52 server.blockUntilShutdown() 53 }