diff --git a/server/Cargo.toml b/server/Cargo.toml index fa9a7a1..d59f05c 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -17,6 +17,7 @@ sqlx = { version = "0.8.0", features = [ "runtime-tokio", "tls-rustls", "sqlite" dotenvy = "0.15.7" moka = { version = "0.12.8", features = ["future"] } futures-util = "0.3.30" +durian = "0.5" realm_auth = { path = "../auth" } realm_shared = { path = "../shared" } diff --git a/server/src/events.rs b/server/src/events.rs new file mode 100644 index 0000000..9dcf5cd --- /dev/null +++ b/server/src/events.rs @@ -0,0 +1,6 @@ +use durian::bincode_packet; + +#[bincode_packet] +pub struct Greet { + id: u32 +} \ No newline at end of file diff --git a/server/src/lib.rs b/server/src/lib.rs index ce433f0..70153ee 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -1,2 +1,3 @@ pub mod server; -pub mod types; \ No newline at end of file +pub mod types; +pub mod events; \ No newline at end of file diff --git a/server/src/main.rs b/server/src/main.rs index 4f73437..710b265 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -1,7 +1,8 @@ use std::env; use std::future::Future; -use std::net::{IpAddr, Ipv6Addr}; +use std::net::{IpAddr, Ipv6Addr, SocketAddr}; use dotenvy::dotenv; +use durian::{PacketManager, ServerConfig}; use futures::future::{self}; use futures::StreamExt; use sqlx::migrate::MigrateDatabase; @@ -13,6 +14,8 @@ use tarpc::{ use tarpc::server::incoming::Incoming; use tarpc::server::BaseChannel; use tracing::{info, subscriber, warn}; +use realm_server::events; +use realm_server::events::{GreetPacketBuilder}; use realm_server::server::RealmChatServer; use realm_server::types::RealmChat; @@ -52,8 +55,22 @@ async fn main() -> anyhow::Result<()> { migrate!().run(&db_pool).await?; // TODO: Do in Docker with Sqlx-cli info!("Migrations complete!"); - let server_addr = (IpAddr::V6(Ipv6Addr::LOCALHOST), env::var("PORT").expect("PORT must be set").parse::().unwrap()); + let port = env::var("PORT").expect("PORT must be set").parse::().unwrap(); + let server_addr = (IpAddr::V6(Ipv6Addr::LOCALHOST), port); + let mut manager = PacketManager::new(); + manager.init_server( + ServerConfig::new( + SocketAddr::from((IpAddr::V6(Ipv6Addr::LOCALHOST), port-1)).to_string(), + 0, None, 2, 256))?; + + let callback = |_| { + + }; + + manager.register_receive_packet::(GreetPacketBuilder).unwrap(); + + // JSON transport is provided by the json_transport tarpc module. It makes it easy // to start up a serde-powered json serialization strategy over TCP. let mut listener = tarpc::serde_transport::tcp::listen(&server_addr, Json::default).await?; diff --git a/server/src/server.rs b/server/src/server.rs index f9654db..58e87c6 100644 --- a/server/src/server.rs +++ b/server/src/server.rs @@ -1,5 +1,5 @@ use std::env; -use std::net::{SocketAddr}; +use std::net::{Ipv6Addr, SocketAddr}; use std::time::Duration; use chrono::{DateTime, Utc}; use moka::future::Cache; @@ -204,6 +204,8 @@ impl RealmChat for RealmChatServer { let result = query!( "INSERT INTO user (userid, name, online, admin) VALUES (?,?,?,?)", user.userid, user.name, false, false).execute(&self.db_pool).await; + + //TODO: tell everyone match result { Ok(_) => Ok(()), @@ -222,6 +224,8 @@ impl RealmChat for RealmChatServer { let result = query!("DELETE FROM user WHERE userid = ?",user.userid).execute(&self.db_pool).await; + //TODO: tell everyone + match result { Ok(_) => Ok(()), Err(_) => Err(MalformedDBResponse),