Skip to main content

x_one/xserver/
server.rs

1//! Server trait 定义
2//!
3//! 实现该 trait 即可接入框架的生命周期管理(`init → run → signal → shutdown`)。
4#![allow(async_fn_in_trait)]
5
6use crate::error::XOneError;
7
8/// 服务器 trait
9///
10/// 实现此 trait 后通过 `run_server(&server)` 运行,
11/// 框架自动处理 `init()`、信号监听和 `shutdown()`。
12///
13/// ```ignore
14/// use x_one::{Server, XOneError};
15///
16/// struct MyServer;
17///
18/// impl Server for MyServer {
19///     async fn run(&self) -> Result<(), XOneError> {
20///         // 启动监听或阻塞运行
21///         Ok(())
22///     }
23///     async fn stop(&self) -> Result<(), XOneError> {
24///         // 收到退出信号后的清理逻辑
25///         Ok(())
26///     }
27/// }
28/// ```
29pub trait Server: Send + Sync {
30    /// 启动服务(阻塞运行)
31    ///
32    /// 框架以异步方式调用此方法,同时监听 SIGINT/SIGTERM 信号。
33    /// 收到信号后框架会调用 `stop()` 通知服务退出。
34    async fn run(&self) -> Result<(), XOneError>;
35
36    /// 停止服务
37    ///
38    /// 收到退出信号时由框架调用,应在此方法中停止接收新请求、
39    /// 通知 `run()` 退出。框架会在 `stop()` 后等待 `run()` 返回。
40    async fn stop(&self) -> Result<(), XOneError>;
41}