diff --git a/Server/src/grpc_server.rs b/Server/src/grpc_server.rs new file mode 100644 index 0000000..bca2cbb --- /dev/null +++ b/Server/src/grpc_server.rs @@ -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}")); + } +} diff --git a/Server/src/main.rs b/Server/src/main.rs index fe978da..57f447e 100644 --- a/Server/src/main.rs +++ b/Server/src/main.rs @@ -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!"); diff --git a/Server/src/network_service.rs b/Server/src/network_service.rs deleted file mode 100644 index 66022b0..0000000 --- a/Server/src/network_service.rs +++ /dev/null @@ -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!"); - } -} diff --git a/Server/src/network_service/grpc_server.rs b/Server/src/network_service/grpc_server.rs deleted file mode 100644 index 6d4a888..0000000 --- a/Server/src/network_service/grpc_server.rs +++ /dev/null @@ -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, - ) -> Result, 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, - ) -> Result, 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, - ) -> Result, Status> { - log::info!("User {} signed up!", request.get_ref().username); - - Ok(Response::new(SignupResponse { - result: RequestResult::Success.into(), - message: "".into(), - })) - } -} diff --git a/Server/src/services/game_service.rs b/Server/src/services/game_service.rs new file mode 100644 index 0000000..00bccc4 --- /dev/null +++ b/Server/src/services/game_service.rs @@ -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, + ) -> Result, 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, + ) -> Result, Status> { + log::info!("User {} signed up!", request.get_ref().username); + + Ok(Response::new(SignupResponse { + result: RequestResult::Success.into(), + message: "".into(), + })) + } +} diff --git a/Server/src/services/general_service.rs b/Server/src/services/general_service.rs new file mode 100644 index 0000000..6d3b61c --- /dev/null +++ b/Server/src/services/general_service.rs @@ -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, + ) -> Result, Status> { + Ok(Response::new(ServerInfo { + lang: "Rust".into(), + ver: "0.1.0".into(), + })) + } +} diff --git a/Server/src/services/mod.rs b/Server/src/services/mod.rs new file mode 100644 index 0000000..5c1e0a5 --- /dev/null +++ b/Server/src/services/mod.rs @@ -0,0 +1,2 @@ +pub(crate) mod game_service; +pub(crate) mod general_service;