message handling
This commit is contained in:
parent
5dffc94ea1
commit
d31f790e81
3 changed files with 23 additions and 9 deletions
|
@ -21,16 +21,19 @@ pub fn Chat() -> impl IntoView {
|
||||||
create_effect(move |_| {
|
create_effect(move |_| {
|
||||||
websocket.ready_state.with(move |state| match *state {
|
websocket.ready_state.with(move |state| match *state {
|
||||||
ConnectionReadyState::Connecting => {
|
ConnectionReadyState::Connecting => {
|
||||||
update_chat_history(&set_chat_history, format!("Connecting to game server...\n"));
|
update_chat_history(
|
||||||
|
&set_chat_history,
|
||||||
|
"Connecting to game server...\n".to_string(),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
ConnectionReadyState::Open => {
|
ConnectionReadyState::Open => {
|
||||||
update_chat_history(&set_chat_history, format!("Connected!\n"));
|
update_chat_history(&set_chat_history, "Connected!\n".to_string());
|
||||||
}
|
}
|
||||||
ConnectionReadyState::Closing => {
|
ConnectionReadyState::Closing => {
|
||||||
update_chat_history(&set_chat_history, format!("Disconnecting...\n"));
|
update_chat_history(&set_chat_history, "Disconnecting...\n".to_string());
|
||||||
}
|
}
|
||||||
ConnectionReadyState::Closed => {
|
ConnectionReadyState::Closed => {
|
||||||
update_chat_history(&set_chat_history, format!("Disconnected.\n"));
|
update_chat_history(&set_chat_history, "Disconnected.\n".to_string());
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
@ -48,7 +51,9 @@ pub fn Chat() -> impl IntoView {
|
||||||
if let Some(message) = message_raw {
|
if let Some(message) = message_raw {
|
||||||
if let Ok(_game) = serde_json::from_str::<Game>(message) {
|
if let Ok(_game) = serde_json::from_str::<Game>(message) {
|
||||||
logging::log!("Game object received at chat component");
|
logging::log!("Game object received at chat component");
|
||||||
} else if let Ok(_) = serde_json::from_str::<ServerStateSummary>(message) {
|
} else if let Ok(_state_summary) =
|
||||||
|
serde_json::from_str::<ServerStateSummary>(message)
|
||||||
|
{
|
||||||
logging::log!("State Summary received at chat component");
|
logging::log!("State Summary received at chat component");
|
||||||
} else {
|
} else {
|
||||||
update_chat_history(&set_chat_history, format!("{}\n", message));
|
update_chat_history(&set_chat_history, format!("{}\n", message));
|
||||||
|
@ -58,7 +63,9 @@ pub fn Chat() -> impl IntoView {
|
||||||
});
|
});
|
||||||
|
|
||||||
let send_message = move |_| {
|
let send_message = move |_| {
|
||||||
websocket.send(&chat_input_ref.get().unwrap().value());
|
websocket.send(&serde_json::to_string(&ChatMessage {
|
||||||
|
text: chat_input_ref.get().unwrap().value(),
|
||||||
|
}).unwrap());
|
||||||
chat_input_ref.get().unwrap().set_value("");
|
chat_input_ref.get().unwrap().set_value("");
|
||||||
logging::log!("Send Message");
|
logging::log!("Send Message");
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
|
|
||||||
|
/// Chat message
|
||||||
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
pub struct ChatMessage {
|
||||||
|
pub text: String,
|
||||||
|
}
|
||||||
|
|
||||||
/// Server state summary
|
/// Server state summary
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
pub struct ServerStateSummary {
|
pub struct ServerStateSummary {
|
||||||
|
|
|
@ -24,11 +24,12 @@ pub async fn message_handler(message: Message, state: &Arc<AppState>, who: &User
|
||||||
} else {
|
} else {
|
||||||
let _res = tx.send(String::from("error creating game"));
|
let _res = tx.send(String::from("error creating game"));
|
||||||
}
|
}
|
||||||
} else {
|
} else if let Ok(chat_message) = serde_json::from_str::<ChatMessage>(&text) {
|
||||||
// just echo
|
let msg = format! {"{0}: {1}", who.name, chat_message.text};
|
||||||
let msg = format! {"{0}: {1}", who.name, text};
|
|
||||||
tracing::debug!("{msg}");
|
tracing::debug!("{msg}");
|
||||||
let _res = tx.send(msg);
|
let _res = tx.send(msg);
|
||||||
|
} else {
|
||||||
|
tracing::debug!("Unhandled message: {}", &text);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue