| use std::error::Error; |
| |
| use tonic::transport::Server; |
| |
| use greeter_proto::proto::greeter_server::GreeterServer; |
| |
| use crate::server::MyGreeter; |
| |
| mod server; |
| mod shutdown_utils; |
| |
| // https://github.com/hyperium/tonic/blob/master/examples/src/helloworld/server.rs |
| #[tokio::main] |
| async fn main() -> Result<(), Box<dyn Error>> { |
| let addr = "[::1]:5042" |
| .parse() |
| .expect("[Server]: Failed to parse socket address"); |
| |
| let grpc_svc = GreeterServer::new(MyGreeter::new()); |
| |
| // Shutdown signal handler |
| let signal = shutdown_utils::signal_handler("gRPC Greeter server"); |
| |
| let grpc_server = Server::builder() |
| .add_service(grpc_svc) |
| .serve_with_shutdown(addr, signal); |
| |
| let grpc_handle = tokio::spawn(grpc_server); |
| |
| println!("GreeterServer listening on {}", addr); |
| match tokio::try_join!(grpc_handle) { |
| Ok(_) => {} |
| Err(e) => { |
| println!("[Server]: Error: Failed to start gRPC Greeter server."); |
| println!("[Server]: Error: {:?}", e); |
| } |
| } |
| |
| Ok(()) |
| } |