use std::convert::Infallible;
use std::error::Error;
use std::net::SocketAddr;
use std::{thread, time};
use tracing::span;
use crate::mylog;
use tonic::{transport::Server, Request, Response, Status};
use tonic::body::BoxBody;
use tonic::codegen::http::{request, response};
use tonic::codegen::{ Service};
use tonic::server::NamedService;
use tonic::transport::Body;
use tonic::transport::server::Router;
use std::env;
pub fn init_server() ->Router {
let mut serverconfig = Server::builder().timeout(time::Duration::from_secs(6 * 3600)).http2_keepalive_timeout(Some(time::Duration::from_secs(6 * 3600))).trace_fn(|x| {
mylog!(x.uri(),x.method());
span!(tracing::Level::TRACE, "GRPC","{} {} {:?}",x.method(), x.uri(),x.headers())
}).accept_http1(true);
let server=serverconfig.add_optional_service(Some(crate::grpcs::default_business::DefaultBusiness::server()));
server
}
pub fn start(server :Router){
let grpcport=env::var("GRPC_PORT").unwrap_or("8088".to_string());
let grpcaddress=format!("0.0.0.0:{}",grpcport);
let addr:SocketAddr =grpcaddress.parse().unwrap();
actix_rt::spawn(async move {
mylog!(format!("grpc server start at address:{grpcaddress}"));
server.serve(addr).await.unwrap();
});
}
async fn start_server<S>(grpcservers: Vec<S>,is_thread:bool) -> std::io::Result<()> where
S: Service<request::Request<Body>, Response = response::Response<BoxBody>, Error = Infallible>
+ NamedService
+ Clone
+ Send
+ 'static,
S::Future: Send + 'static{
if is_thread {
actix_rt::spawn(async {
start_server(grpcservers, false).await;
});
return Ok(());
}
let mut server = Server::builder().timeout(time::Duration::from_secs(6 * 3600)).http2_keepalive_timeout(Some(time::Duration::from_secs(6 * 3600))).trace_fn(|x| {
mylog!(x.uri(),x.method());
span!(tracing::Level::TRACE, "GRPC","{} {} {:?}",x.method(), x.uri(),x.headers())
}).accept_http1(true).add_optional_service(Some(crate::grpcs::default_business::DefaultBusiness::server()));
for grpcserver in grpcservers {
server=server.add_service(grpcserver);
}
let addr:SocketAddr ="0.0.0.0:3000".parse().unwrap();
Ok(server.serve(addr).await.unwrap())
}