fix some emotion bugs
This commit is contained in:
parent
bd28e201a2
commit
989e20757b
11 changed files with 1203 additions and 190 deletions
|
|
@ -9,6 +9,8 @@ use leptos::reactive::owner::LocalStorage;
|
|||
use chattyness_db::models::ChannelMemberWithAvatar;
|
||||
use chattyness_db::ws_messages::{ClientMessage, ServerMessage};
|
||||
|
||||
use super::chat_types::ChatMessage;
|
||||
|
||||
/// WebSocket connection state.
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
|
||||
pub enum WsState {
|
||||
|
|
@ -38,6 +40,7 @@ pub fn use_channel_websocket(
|
|||
realm_slug: Signal<String>,
|
||||
channel_id: Signal<Option<uuid::Uuid>>,
|
||||
on_members_update: Callback<Vec<ChannelMemberWithAvatar>>,
|
||||
on_chat_message: Callback<ChatMessage>,
|
||||
) -> (Signal<WsState>, WsSenderStorage) {
|
||||
use std::cell::RefCell;
|
||||
use std::rc::Rc;
|
||||
|
|
@ -129,6 +132,7 @@ pub fn use_channel_websocket(
|
|||
// onmessage
|
||||
let members_for_msg = members_clone.clone();
|
||||
let on_members_update_clone = on_members_update.clone();
|
||||
let on_chat_message_clone = on_chat_message.clone();
|
||||
let onmessage = Closure::wrap(Box::new(move |e: MessageEvent| {
|
||||
if let Ok(text) = e.data().dyn_into::<js_sys::JsString>() {
|
||||
let text: String = text.into();
|
||||
|
|
@ -136,7 +140,12 @@ pub fn use_channel_websocket(
|
|||
web_sys::console::log_1(&format!("[WS<-Server] {}", text).into());
|
||||
|
||||
if let Ok(msg) = serde_json::from_str::<ServerMessage>(&text) {
|
||||
handle_server_message(msg, &members_for_msg, &on_members_update_clone);
|
||||
handle_server_message(
|
||||
msg,
|
||||
&members_for_msg,
|
||||
&on_members_update_clone,
|
||||
&on_chat_message_clone,
|
||||
);
|
||||
}
|
||||
}
|
||||
}) as Box<dyn FnMut(MessageEvent)>);
|
||||
|
|
@ -177,6 +186,7 @@ fn handle_server_message(
|
|||
msg: ServerMessage,
|
||||
members: &std::rc::Rc<std::cell::RefCell<Vec<ChannelMemberWithAvatar>>>,
|
||||
on_update: &Callback<Vec<ChannelMemberWithAvatar>>,
|
||||
on_chat_message: &Callback<ChatMessage>,
|
||||
) {
|
||||
let mut members_vec = members.borrow_mut();
|
||||
|
||||
|
|
@ -241,6 +251,30 @@ fn handle_server_message(
|
|||
#[cfg(debug_assertions)]
|
||||
web_sys::console::error_1(&format!("[WS] Server error: {} - {}", code, message).into());
|
||||
}
|
||||
ServerMessage::ChatMessageReceived {
|
||||
message_id,
|
||||
user_id,
|
||||
guest_session_id,
|
||||
display_name,
|
||||
content,
|
||||
emotion,
|
||||
x,
|
||||
y,
|
||||
timestamp,
|
||||
} => {
|
||||
let chat_msg = ChatMessage {
|
||||
message_id,
|
||||
user_id,
|
||||
guest_session_id,
|
||||
display_name,
|
||||
content,
|
||||
emotion,
|
||||
x,
|
||||
y,
|
||||
timestamp,
|
||||
};
|
||||
on_chat_message.run(chat_msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -250,6 +284,7 @@ pub fn use_channel_websocket(
|
|||
_realm_slug: Signal<String>,
|
||||
_channel_id: Signal<Option<uuid::Uuid>>,
|
||||
_on_members_update: Callback<Vec<ChannelMemberWithAvatar>>,
|
||||
_on_chat_message: Callback<ChatMessage>,
|
||||
) -> (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