• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use std::error::Error;
2 
3 use tonic::transport::Server;
4 
5 use proto_bindings::proto::greeter_server::GreeterServer;
6 
7 use crate::server::MyGreeter;
8 
9 mod server;
10 mod shutdown_utils;
11 
12 // https://github.com/hyperium/tonic/blob/master/examples/src/helloworld/server.rs
13 #[tokio::main]
main() -> Result<(), Box<dyn Error>>14 async fn main() -> Result<(), Box<dyn Error>> {
15     let addr = "[::1]:5042"
16         .parse()
17         .expect("[Server]: Failed to parse socket address");
18 
19     let grpc_svc = GreeterServer::new(MyGreeter::new());
20 
21     // Shutdown signal handler
22     let signal = shutdown_utils::signal_handler("gRPC Greeter server");
23 
24     let grpc_server = Server::builder()
25         .add_service(grpc_svc)
26         .serve_with_shutdown(addr, signal);
27 
28     let grpc_handle = tokio::spawn(grpc_server);
29 
30     println!("GreeterServer listening on {}", addr);
31     match tokio::try_join!(grpc_handle) {
32         Ok(_) => {}
33         Err(e) => {
34             println!("[Server]: Error: Failed to start gRPC Greeter server.");
35             println!("[Server]: Error: {:?}", e);
36         }
37     }
38 
39     Ok(())
40 }
41