Attempting to fix sendplayer

This commit is contained in:
2026-02-23 17:46:47 +01:00
parent bdbd37307c
commit 768bbd239b
5 changed files with 43 additions and 8 deletions
+12 -2
View File
@@ -27,6 +27,7 @@ async fn main() -> session_rs::Result<()> {
Box::pin(async move { Box::pin(async move {
println!("Connected"); println!("Connected");
let uuid = Arc::new(Mutex::new(String::new())); let uuid = Arc::new(Mutex::new(String::new()));
let name = Arc::new(Mutex::new(String::new()));
session session
.on_close({ .on_close({
@@ -63,13 +64,15 @@ async fn main() -> session_rs::Result<()> {
.on_request::<methods::Auth, _>({ .on_request::<methods::Auth, _>({
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let sessions = Arc::clone(&sessions);
let name = Arc::clone(&name);
let session = session.clone(); let session = session.clone();
let sessions = sessions.clone();
move |_, token| { move |_, token| {
methods::auth::authenticate( methods::auth::authenticate(
sessions.clone(), sessions.clone(),
session.clone(), session.clone(),
name.clone(),
uuid.clone(), uuid.clone(),
token, token,
pool.clone(), pool.clone(),
@@ -188,9 +191,16 @@ async fn main() -> session_rs::Result<()> {
let sessions = Arc::clone(&sessions); let sessions = Arc::clone(&sessions);
let pool = Arc::clone(&pool); let pool = Arc::clone(&pool);
let uuid = Arc::clone(&uuid); let uuid = Arc::clone(&uuid);
let name = Arc::clone(&name);
move |_, targets| { move |_, targets| {
methods::user::send_user(sessions.clone(), uuid.clone(), targets.clone(), pool.clone()) methods::user::send_user(
sessions.clone(),
name.clone(),
uuid.clone(),
targets.targets.clone(),
pool.clone(),
)
} }
}) })
.await; .await;
+2
View File
@@ -11,6 +11,7 @@ use crate::{
pub async fn authenticate( pub async fn authenticate(
sessions: SessionMap, sessions: SessionMap,
session: Session, session: Session,
name: UUID,
uuid: UUID, uuid: UUID,
session_token: String, session_token: String,
pool: Arc<SqlitePool>, pool: Arc<SqlitePool>,
@@ -41,6 +42,7 @@ pub async fn authenticate(
.map_err(|_| "Unable to parse auth response".to_string())?; .map_err(|_| "Unable to parse auth response".to_string())?;
*uuid.lock().await = auth.id.clone(); *uuid.lock().await = auth.id.clone();
*name.lock().await = auth.name.clone();
sessions sessions
.lock() .lock()
+9 -4
View File
@@ -6,7 +6,7 @@ use serde::{Deserialize, Serialize};
use session_rs::Method; use session_rs::Method;
use crate::{ use crate::{
types::{EmoteRequest, EventEmote}, types::{EmoteRequest, EventEmote, PlayerStream},
user::User, user::User,
}; };
@@ -84,7 +84,7 @@ impl Method for EmoteEvent {
pub struct GetPlayer; pub struct GetPlayer;
impl Method for GetPlayer { impl Method for GetPlayer {
const NAME: &'static str = "player"; const NAME: &'static str = "get_player";
type Request = String; type Request = String;
type Response = Option<User>; type Response = Option<User>;
type Error = String; type Error = String;
@@ -95,7 +95,7 @@ pub struct Player;
impl Method for Player { impl Method for Player {
const NAME: &'static str = "player"; const NAME: &'static str = "player";
type Request = User; type Request = PlayerStream;
type Response = (); type Response = ();
type Error = (); type Error = ();
} }
@@ -103,9 +103,14 @@ impl Method for Player {
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SendPlayer; pub struct SendPlayer;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SendPlayerRequest {
pub targets: Vec<String>,
}
impl Method for SendPlayer { impl Method for SendPlayer {
const NAME: &'static str = "send_player"; const NAME: &'static str = "send_player";
type Request = Vec<String>; type Request = SendPlayerRequest;
type Response = (); type Response = ();
type Error = String; type Error = String;
} }
+11 -2
View File
@@ -4,7 +4,7 @@ use sqlx::SqlitePool;
use crate::{ use crate::{
methods, methods,
types::{SessionMap, UUID}, types::{PlayerStream, SessionMap, UUID},
user::User, user::User,
}; };
@@ -22,11 +22,20 @@ pub async fn get_user(
pub async fn send_user( pub async fn send_user(
sessions: SessionMap, sessions: SessionMap,
name: UUID,
uuid: UUID, uuid: UUID,
targets: Vec<String>, targets: Vec<String>,
pool: Arc<SqlitePool>, pool: Arc<SqlitePool>,
) -> Result<(), String> { ) -> Result<(), String> {
let user = crate::user::get(&uuid.lock().await, pool.as_ref()).await?; let user = PlayerStream {
player: crate::user::get(&uuid.lock().await, pool.as_ref()).await?,
uuid: uuid.lock().await.clone(),
name: name.lock().await.clone(),
};
println!("{user:?}");
println!("{targets:?}");
for target in targets { for target in targets {
if let Some(sessions) = sessions.lock().await.get_mut(&target) { if let Some(sessions) = sessions.lock().await.get_mut(&target) {
+9
View File
@@ -7,6 +7,8 @@ use std::{
sync::Arc, sync::Arc,
}; };
use crate::user::User;
pub type SessionMap = Arc<Mutex<HashMap<String, HashSet<Session>>>>; pub type SessionMap = Arc<Mutex<HashMap<String, HashSet<Session>>>>;
pub type UUID = Arc<Mutex<String>>; pub type UUID = Arc<Mutex<String>>;
@@ -29,3 +31,10 @@ pub struct EventEmote {
pub emote: String, pub emote: String,
pub from: String, pub from: String,
} }
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PlayerStream {
pub player: User,
pub uuid: String,
pub name: String,
}