durian for realtime updates

This commit is contained in:
2024-09-22 13:43:52 -04:00
Unverified
parent e3584034a2
commit ff6f648748
5 changed files with 33 additions and 4 deletions

6
server/src/events.rs Normal file
View File

@@ -0,0 +1,6 @@
use durian::bincode_packet;
#[bincode_packet]
pub struct Greet {
id: u32
}

View File

@@ -1,2 +1,3 @@
pub mod server;
pub mod types;
pub mod types;
pub mod events;

View File

@@ -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::<u16>().unwrap());
let port = env::var("PORT").expect("PORT must be set").parse::<u16>().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::<events::Greet>(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?;

View File

@@ -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),