ratchjob 0.2.1

一个rust实现的分布式任务调度平台服务。计划完全兼容xxl-job协议,然后再增强一些任务调度平台能力。
Documentation
use crate::common::share_data::ShareData;
use crate::grpc::handler::InvokerHandler;
use crate::grpc::ratch_server_proto::{request_server, Payload, Response};
use crate::grpc::{PayloadHandler, RequestMeta};
use std::sync::Arc;
use tonic::{Request, Status};

pub struct RequestServerImpl {
    #[allow(dead_code)]
    pub(crate) share_data: Arc<ShareData>,
    invoker: InvokerHandler,
}

impl RequestServerImpl {
    pub fn new(share_data: Arc<ShareData>, invoker: InvokerHandler) -> Self {
        RequestServerImpl {
            share_data,
            invoker,
        }
    }
}

#[tonic::async_trait]
impl request_server::Request for RequestServerImpl {
    async fn request(
        &self,
        request: Request<Payload>,
    ) -> Result<tonic::Response<Response>, Status> {
        let remote_addr = request.remote_addr().unwrap();
        let payload = request.into_inner();
        let meta = RequestMeta {
            connection_id: Arc::new(remote_addr.to_string()),
        };
        let result = self.invoker.handle(payload, meta).await;
        match result {
            Ok(result) => Ok(tonic::Response::new(Response {
                code: 0,
                data: Some(result.payload),
                message: "".to_string(),
            })),
            Err(err) => Ok(tonic::Response::new(Response {
                code: 500,
                message: err.to_string(),
                data: None,
            })),
        }
    }
}