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