(server) chore: Rearrange server structure (#33)

This commit is contained in:
2025-07-14 17:53:26 +08:00
parent e35236b8ef
commit 0c86730384
7 changed files with 87 additions and 94 deletions

29
Server/src/grpc_server.rs Normal file
View File

@ -0,0 +1,29 @@
use std::net::SocketAddr;
use tonic::transport::Server;
use tonic_web::GrpcWebLayer;
use crate::protocol::game_service_server::GameServiceServer;
use crate::protocol::general_service_server::GeneralServiceServer;
use crate::services::game_service::GameServiceImpl;
use crate::services::general_service::GeneralServiceImpl;
pub(crate) struct GrpcServer;
impl GrpcServer {
pub(crate) async fn init() {
let addr = SocketAddr::new([127, 0, 0, 1].into(), 12345);
let general_service = GeneralServiceServer::new(GeneralServiceImpl);
let game_service = GameServiceServer::new(GameServiceImpl);
Server::builder()
.accept_http1(true)
.layer(GrpcWebLayer::new())
.add_service(general_service)
.add_service(game_service)
.serve(addr)
.await
.unwrap_or_else(|e| log::error!("Failed to build server: {e}"));
}
}

View File

@ -1,9 +1,10 @@
mod command_helper;
mod network_service;
mod grpc_server;
mod protocol;
mod server_logger;
mod services;
use network_service::NetworkService;
use grpc_server::GrpcServer;
use server_logger::ServerLogger;
#[tokio::main]
@ -12,7 +13,7 @@ async fn main() {
log::info!("Starting server...");
NetworkService::init().await;
GrpcServer::init().await;
log::info!("Server successfully started!");

View File

@ -1,15 +0,0 @@
mod grpc_server;
use grpc_server::GrpcServer;
pub(crate) struct NetworkService;
impl NetworkService {
pub(crate) async fn init() {
log::info!("Starting network service...");
tokio::spawn(async { GrpcServer::init().await });
log::info!("network service successfully started!");
}
}

View File

@ -1,76 +0,0 @@
use std::net::SocketAddr;
use tonic::transport::Server;
use tonic::{Request, Response, Status};
use tonic_web::GrpcWebLayer;
use crate::protocol::game_service_server::{GameService, GameServiceServer};
use crate::protocol::general_service_server::{GeneralService, GeneralServiceServer};
use crate::protocol::{
Empty, LoginRequest, LoginResponse, RequestResult, ServerInfo, SignupRequest, SignupResponse,
};
pub(crate) struct GrpcServer;
impl GrpcServer {
pub(crate) async fn init() {
let addr = SocketAddr::new([127, 0, 0, 1].into(), 12345);
let general_service = GeneralServiceServer::new(GeneralServiceImpl);
let game_service = GameServiceServer::new(GameServiceImpl);
Server::builder()
.accept_http1(true)
.layer(GrpcWebLayer::new())
.add_service(general_service)
.add_service(game_service)
.serve(addr)
.await
.unwrap_or_else(|e| log::error!("Failed to build server: {e}"));
}
}
// Define server implementations
struct GeneralServiceImpl;
struct GameServiceImpl;
#[tonic::async_trait]
impl GeneralService for GeneralServiceImpl {
async fn get_server_info(
&self,
_request: Request<Empty>,
) -> Result<Response<ServerInfo>, Status> {
Ok(Response::new(ServerInfo {
lang: "Rust".into(),
ver: "0.1.0".into(),
}))
}
}
#[tonic::async_trait]
impl GameService for GameServiceImpl {
async fn login(
&self,
request: Request<LoginRequest>,
) -> Result<Response<LoginResponse>, Status> {
log::info!("User {} logged in!", request.get_ref().username);
Ok(Response::new(LoginResponse {
result: RequestResult::Success.into(),
message: "".into(),
}))
}
async fn signup(
&self,
request: Request<SignupRequest>,
) -> Result<Response<SignupResponse>, Status> {
log::info!("User {} signed up!", request.get_ref().username);
Ok(Response::new(SignupResponse {
result: RequestResult::Success.into(),
message: "".into(),
}))
}
}

View File

@ -0,0 +1,33 @@
use tonic::{Request, Response, Status};
use crate::protocol::game_service_server::GameService;
use crate::protocol::{LoginRequest, LoginResponse, RequestResult, SignupRequest, SignupResponse};
pub(crate) struct GameServiceImpl;
#[tonic::async_trait]
impl GameService for GameServiceImpl {
async fn login(
&self,
request: Request<LoginRequest>,
) -> Result<Response<LoginResponse>, Status> {
log::info!("User {} logged in!", request.get_ref().username);
Ok(Response::new(LoginResponse {
result: RequestResult::Success.into(),
message: "".into(),
}))
}
async fn signup(
&self,
request: Request<SignupRequest>,
) -> Result<Response<SignupResponse>, Status> {
log::info!("User {} signed up!", request.get_ref().username);
Ok(Response::new(SignupResponse {
result: RequestResult::Success.into(),
message: "".into(),
}))
}
}

View File

@ -0,0 +1,19 @@
use tonic::{Request, Response, Status};
use crate::protocol::general_service_server::GeneralService;
use crate::protocol::{Empty, ServerInfo};
pub(crate) struct GeneralServiceImpl;
#[tonic::async_trait]
impl GeneralService for GeneralServiceImpl {
async fn get_server_info(
&self,
_request: Request<Empty>,
) -> Result<Response<ServerInfo>, Status> {
Ok(Response::new(ServerInfo {
lang: "Rust".into(),
ver: "0.1.0".into(),
}))
}
}

View File

@ -0,0 +1,2 @@
pub(crate) mod game_service;
pub(crate) mod general_service;