Silence warnings, run cargo fmt
This commit is contained in:
parent
fe1c1d3655
commit
af1c767f5f
77 changed files with 1904 additions and 903 deletions
|
|
@ -6,12 +6,12 @@
|
|||
use leptos::prelude::*;
|
||||
use leptos::reactive::owner::LocalStorage;
|
||||
|
||||
use chattyness_db::models::{ChannelMemberWithAvatar, LooseProp};
|
||||
#[cfg(feature = "hydrate")]
|
||||
use chattyness_db::models::EmotionState;
|
||||
use chattyness_db::models::{ChannelMemberWithAvatar, LooseProp};
|
||||
use chattyness_db::ws_messages::ClientMessage;
|
||||
#[cfg(feature = "hydrate")]
|
||||
use chattyness_db::ws_messages::{DisconnectReason, ServerMessage, WsConfig};
|
||||
use chattyness_db::ws_messages::{DisconnectReason, ServerMessage};
|
||||
|
||||
use super::chat_types::ChatMessage;
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ pub fn use_channel_websocket(
|
|||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
use wasm_bindgen::{closure::Closure, JsCast};
|
||||
use wasm_bindgen::{JsCast, closure::Closure};
|
||||
use web_sys::{CloseEvent, ErrorEvent, MessageEvent, WebSocket};
|
||||
|
||||
let (ws_state, set_ws_state) = signal(WsState::Disconnected);
|
||||
|
|
@ -100,8 +100,8 @@ pub fn use_channel_websocket(
|
|||
|
||||
// Create a stored sender function (using new_local for WASM single-threaded environment)
|
||||
let ws_ref_for_send = ws_ref.clone();
|
||||
let sender: WsSenderStorage = StoredValue::new_local(Some(Box::new(
|
||||
move |msg: ClientMessage| {
|
||||
let sender: WsSenderStorage =
|
||||
StoredValue::new_local(Some(Box::new(move |msg: ClientMessage| {
|
||||
if let Some(ws) = ws_ref_for_send.borrow().as_ref() {
|
||||
if ws.ready_state() == WebSocket::OPEN {
|
||||
if let Ok(json) = serde_json::to_string(&msg) {
|
||||
|
|
@ -111,8 +111,7 @@ pub fn use_channel_websocket(
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
)));
|
||||
})));
|
||||
|
||||
// Effect to manage WebSocket lifecycle
|
||||
let ws_ref_clone = ws_ref.clone();
|
||||
|
|
@ -198,24 +197,38 @@ pub fn use_channel_websocket(
|
|||
|
||||
if let Ok(msg) = serde_json::from_str::<ServerMessage>(&text) {
|
||||
// Check for Welcome message to start heartbeat with server-provided config
|
||||
if let ServerMessage::Welcome { ref config, ref member, .. } = msg {
|
||||
if let ServerMessage::Welcome {
|
||||
ref config,
|
||||
ref member,
|
||||
..
|
||||
} = msg
|
||||
{
|
||||
if !*heartbeat_started_clone.borrow() {
|
||||
*heartbeat_started_clone.borrow_mut() = true;
|
||||
let ping_interval_ms = config.ping_interval_secs * 1000;
|
||||
let ws_ref_ping = ws_ref_for_heartbeat.clone();
|
||||
#[cfg(debug_assertions)]
|
||||
web_sys::console::log_1(
|
||||
&format!("[WS] Starting heartbeat with interval {}ms", ping_interval_ms).into(),
|
||||
&format!(
|
||||
"[WS] Starting heartbeat with interval {}ms",
|
||||
ping_interval_ms
|
||||
)
|
||||
.into(),
|
||||
);
|
||||
let heartbeat = gloo_timers::callback::Interval::new(ping_interval_ms as u32, move || {
|
||||
if let Some(ws) = ws_ref_ping.borrow().as_ref() {
|
||||
if ws.ready_state() == WebSocket::OPEN {
|
||||
if let Ok(json) = serde_json::to_string(&ClientMessage::Ping) {
|
||||
let _ = ws.send_with_str(&json);
|
||||
let heartbeat = gloo_timers::callback::Interval::new(
|
||||
ping_interval_ms as u32,
|
||||
move || {
|
||||
if let Some(ws) = ws_ref_ping.borrow().as_ref() {
|
||||
if ws.ready_state() == WebSocket::OPEN {
|
||||
if let Ok(json) =
|
||||
serde_json::to_string(&ClientMessage::Ping)
|
||||
{
|
||||
let _ = ws.send_with_str(&json);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
std::mem::forget(heartbeat);
|
||||
}
|
||||
// Call on_welcome callback with current user info
|
||||
|
|
@ -292,7 +305,7 @@ fn handle_server_message(
|
|||
ServerMessage::Welcome {
|
||||
member: _,
|
||||
members: initial_members,
|
||||
config: _, // Config is handled in the caller for heartbeat setup
|
||||
config: _, // Config is handled in the caller for heartbeat setup
|
||||
} => {
|
||||
*members_vec = initial_members;
|
||||
on_update.run(members_vec.clone());
|
||||
|
|
@ -314,7 +327,9 @@ fn handle_server_message(
|
|||
// Find the member before removing
|
||||
let leaving_member = members_vec
|
||||
.iter()
|
||||
.find(|m| m.member.user_id == user_id && m.member.guest_session_id == guest_session_id)
|
||||
.find(|m| {
|
||||
m.member.user_id == user_id && m.member.guest_session_id == guest_session_id
|
||||
})
|
||||
.cloned();
|
||||
|
||||
// Always remove from active members list
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue