This commit is contained in:
2026-06-21 10:13:30 +02:00
parent e38dcfca5a
commit 3fd2b8ade8
2 changed files with 40 additions and 25 deletions
+24 -23
View File
@@ -42,38 +42,39 @@ pub async fn ws_handler(
async fn handle_socket(socket: WebSocket, state: AppState, user: User) { async fn handle_socket(socket: WebSocket, state: AppState, user: User) {
let (mut sender, mut receiver) = socket.split(); let (mut sender, mut receiver) = socket.split();
let (tx, mut rx) = mpsc::unbounded_channel(); let (tx, mut rx) = mpsc::unbounded_channel::<Message>();
let event_bus = state.event_bus.clone(); let event_bus = state.event_bus.clone();
let client = GatewayClient::new(user); let client = GatewayClient::new(user, tx);
client.on_connect().await; client.on_connect().await;
state.gateway.add_user(client); state.gateway.add_client(client.clone());
// // Enregistrement du client (Connect) // // Enregistrement du client (Connect)
// on_connect(user_id, tx, &state).await; // on_connect(user_id, tx, &state).await;
// //
// // Task pour envoyer les messages du canal mpsc vers le WebSocket // Task pour envoyer les messages du canal mpsc vers le WebSocket
// let mut send_task = tokio::spawn(async move { let mut send_task = tokio::spawn(async move {
// while let Some(message) = rx.recv().await { while let Some(message) = rx.recv().await {
// if sender.send(message).await.is_err() { if sender.send(message).await.is_err() {
// break; break;
// } }
// } }
// }); });
// //
// // Task pour recevoir les messages du WebSocket // Task pour recevoir les messages du WebSocket
// let state_clone = state.clone(); let client_clone = client.clone();
// let mut recv_task = tokio::spawn(async move { let state_clone = state.clone();
// while let Some(Ok(message)) = receiver.next().await { let mut recv_task = tokio::spawn(async move {
// on_message(user_id, message, &state_clone).await; while let Some(Ok(message)) = receiver.next().await {
// } client_clone.on_message(message).await;
// }); }
});
// //
// // Attente de la fin d'une des tâches (déconnexion) // Attente de la fin d'une des tâches (déconnexion)
// tokio::select! { tokio::select! {
// _ = (&mut send_task) => recv_task.abort(), _ = (&mut send_task) => recv_task.abort(),
// _ = (&mut recv_task) => send_task.abort(), _ = (&mut recv_task) => send_task.abort(),
// }; };
// //
// // Déconnexion (Disconnect) // // Déconnexion (Disconnect)
// on_disconnect(user_id, &state).await; // on_disconnect(user_id, &state).await;
+16 -2
View File
@@ -1,6 +1,8 @@
use crate::models::user::Model as User; use crate::models::user::Model as User;
use axum::extract::ws::Message;
use parking_lot::RwLock; use parking_lot::RwLock;
use std::collections::HashMap; use std::collections::HashMap;
use tokio::sync::mpsc;
use uuid::Uuid; use uuid::Uuid;
pub mod handlers; pub mod handlers;
@@ -16,6 +18,7 @@ pub struct GatewayManager {
pub struct GatewayClient { pub struct GatewayClient {
user: User, user: User,
connection_id: Uuid, connection_id: Uuid,
sender: mpsc::UnboundedSender<Message>,
} }
impl GatewayManager { impl GatewayManager {
@@ -37,11 +40,12 @@ impl GatewayManager {
} }
impl GatewayClient { impl GatewayClient {
pub fn new(user: User) -> Self { pub fn new(user: User, sender: mpsc::UnboundedSender<Message>) -> Self {
let connection_id = Uuid::new_v4(); let connection_id = Uuid::new_v4();
Self { Self {
user, user,
connection_id, connection_id,
sender,
} }
} }
@@ -49,5 +53,15 @@ impl GatewayClient {
async fn on_disconnect(&self) {} async fn on_disconnect(&self) {}
async fn on_message(&self) {} async fn on_message(&self, message: Message) {
match message {
Message::Binary(content) => {}
Message::Text(content) => {
tracing::info!("Received text message: {}", content);
}
Message::Ping(_) => {}
Message::Pong(_) => {}
Message::Close(_) => {}
}
}
} }