From 7a6ac2f09d4c03f8b13e0c5be12b254dd4d17be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=90=E5=AE=B6?= Date: Sun, 9 Mar 2025 20:21:01 +0800 Subject: [PATCH] =?UTF-8?q?websocket=E6=B7=BB=E5=8A=A0account?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/controller/websocket_controller.rs | 4 +++- server/src/service/websocket_service.rs | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/src/controller/websocket_controller.rs b/server/src/controller/websocket_controller.rs index 4f10573..e41b1f0 100644 --- a/server/src/controller/websocket_controller.rs +++ b/server/src/controller/websocket_controller.rs @@ -4,16 +4,18 @@ use axum::extract::ws::WebSocketUpgrade; use axum::extract::ConnectInfo; use axum::response::IntoResponse; use axum_extra::{headers, TypedHeader}; +use library::context::Context; use macros::ws; use crate::service::websocket_service; #[ws("/ws")] pub async fn websocket_handler( + context: Context, ws: WebSocketUpgrade, user_agent: Option>, ConnectInfo(addr): ConnectInfo ) -> impl IntoResponse { tracing::info!("`{:?}` at {:?} connected.", user_agent, addr); - ws.on_upgrade(move |socket| websocket_service::handle_socket(socket, addr)) + ws.on_upgrade(move |socket| websocket_service::handle_socket(socket, addr, context)) } diff --git a/server/src/service/websocket_service.rs b/server/src/service/websocket_service.rs index c07cd0f..34ad600 100644 --- a/server/src/service/websocket_service.rs +++ b/server/src/service/websocket_service.rs @@ -4,9 +4,12 @@ use std::ops::ControlFlow; use axum::extract::ws::{Message, WebSocket}; use futures::stream::{SplitSink, SplitStream}; use futures::{SinkExt, StreamExt}; +use library::context::Context; /// Actual websocket statemachine (one will be spawned per connection) -pub async fn handle_socket(socket: WebSocket, _who: SocketAddr) { +pub async fn handle_socket(socket: WebSocket, _who: SocketAddr, context: Context) { + let account = context.get_account().unwrap(); + tracing::info!("`{:?}` at {:?} connected, user is {:?}", account, _who, account.username); let (sender, receiver) = socket.split(); tokio::spawn(write(sender));