use std::error::Error;
use wasm_bindgen::prelude::*;
use starkingdoms_protocol::MessageC2S;
use crate::CLIENT;
use futures::SinkExt;
use starkingdoms_protocol::message_c2s::MessageC2SChat;
#[wasm_bindgen]
// TODO: Switch to async-aware mutexes
#[allow(clippy::await_holding_lock)]
pub async fn send_chat(message: &str) -> Result<(), JsError> {
let client_data = &mut CLIENT.write()?.client_data;
if let Some(data) = client_data {
let msg = MessageC2S::Chat(MessageC2SChat {
message: message.to_string(),
special_fields: Default::default(),
}).try_into().map_err(|e: Box<dyn Error> | JsError::new(&e.to_string()))?;
send!(data.tx, msg).await?;
} else {
return Err(JsError::new("Client not yet connected to server"));
}
Ok(())
}