(server) chore: Rearrange server structure (#33)
This commit is contained in:
29
Server/src/grpc_server.rs
Normal file
29
Server/src/grpc_server.rs
Normal 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}"));
|
||||
}
|
||||
}
|
@ -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!");
|
||||
|
||||
|
@ -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!");
|
||||
}
|
||||
}
|
@ -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(),
|
||||
}))
|
||||
}
|
||||
}
|
33
Server/src/services/game_service.rs
Normal file
33
Server/src/services/game_service.rs
Normal 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(),
|
||||
}))
|
||||
}
|
||||
}
|
19
Server/src/services/general_service.rs
Normal file
19
Server/src/services/general_service.rs
Normal 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(),
|
||||
}))
|
||||
}
|
||||
}
|
2
Server/src/services/mod.rs
Normal file
2
Server/src/services/mod.rs
Normal file
@ -0,0 +1,2 @@
|
||||
pub(crate) mod game_service;
|
||||
pub(crate) mod general_service;
|
Reference in New Issue
Block a user