feat: private messages.
This commit is contained in:
parent
0492043625
commit
22cc0fdc38
11 changed files with 1135 additions and 44 deletions
|
|
@ -62,6 +62,15 @@ pub struct ChannelMemberInfo {
|
|||
pub display_name: String,
|
||||
}
|
||||
|
||||
/// WebSocket error info for UI display.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct WsError {
|
||||
/// Error code from server.
|
||||
pub code: String,
|
||||
/// Human-readable error message.
|
||||
pub message: String,
|
||||
}
|
||||
|
||||
/// Hook to manage WebSocket connection for a channel.
|
||||
///
|
||||
/// Returns a tuple of:
|
||||
|
|
@ -78,6 +87,7 @@ pub fn use_channel_websocket(
|
|||
on_prop_picked_up: Callback<uuid::Uuid>,
|
||||
on_member_fading: Callback<FadingMember>,
|
||||
on_welcome: Option<Callback<ChannelMemberInfo>>,
|
||||
on_error: Option<Callback<WsError>>,
|
||||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
|
@ -175,6 +185,7 @@ pub fn use_channel_websocket(
|
|||
let on_prop_picked_up_clone = on_prop_picked_up.clone();
|
||||
let on_member_fading_clone = on_member_fading.clone();
|
||||
let on_welcome_clone = on_welcome.clone();
|
||||
let on_error_clone = on_error.clone();
|
||||
// For starting heartbeat on Welcome
|
||||
let ws_ref_for_heartbeat = ws_ref.clone();
|
||||
let heartbeat_started: Rc<RefCell<bool>> = Rc::new(RefCell::new(false));
|
||||
|
|
@ -226,6 +237,7 @@ pub fn use_channel_websocket(
|
|||
&on_prop_dropped_clone,
|
||||
&on_prop_picked_up_clone,
|
||||
&on_member_fading_clone,
|
||||
&on_error_clone,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -272,6 +284,7 @@ fn handle_server_message(
|
|||
on_prop_dropped: &Callback<LooseProp>,
|
||||
on_prop_picked_up: &Callback<uuid::Uuid>,
|
||||
on_member_fading: &Callback<FadingMember>,
|
||||
on_error: &Option<Callback<WsError>>,
|
||||
) {
|
||||
let mut members_vec = members.borrow_mut();
|
||||
|
||||
|
|
@ -360,6 +373,10 @@ fn handle_server_message(
|
|||
ServerMessage::Error { code, message } => {
|
||||
// Always log errors to console (not just debug mode)
|
||||
web_sys::console::error_1(&format!("[WS] Server error: {} - {}", code, message).into());
|
||||
// Call error callback if provided
|
||||
if let Some(callback) = on_error {
|
||||
callback.run(WsError { code, message });
|
||||
}
|
||||
}
|
||||
ServerMessage::ChatMessageReceived {
|
||||
message_id,
|
||||
|
|
@ -371,6 +388,8 @@ fn handle_server_message(
|
|||
x,
|
||||
y,
|
||||
timestamp,
|
||||
is_whisper,
|
||||
is_same_scene,
|
||||
} => {
|
||||
let chat_msg = ChatMessage {
|
||||
message_id,
|
||||
|
|
@ -382,6 +401,8 @@ fn handle_server_message(
|
|||
x,
|
||||
y,
|
||||
timestamp,
|
||||
is_whisper,
|
||||
is_same_scene,
|
||||
};
|
||||
on_chat_message.run(chat_msg);
|
||||
}
|
||||
|
|
@ -429,6 +450,7 @@ pub fn use_channel_websocket(
|
|||
_on_prop_picked_up: Callback<uuid::Uuid>,
|
||||
_on_member_fading: Callback<FadingMember>,
|
||||
_on_welcome: Option<Callback<ChannelMemberInfo>>,
|
||||
_on_error: Option<Callback<WsError>>,
|
||||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
let (ws_state, _) = signal(WsState::Disconnected);
|
||||
let sender: WsSenderStorage = StoredValue::new_local(None);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue