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  }