Compare commits

...

7 Commits

Author SHA1 Message Date
043bfe263f Update Cargo.lock 2024-05-22 12:24:13 -07:00
66064dca58 Merge branch 'main' into coredump-enginecommandmanager 2024-05-22 11:51:20 -07:00
cdb12f8e6f Merge branch 'main' into coredump-enginecommandmanager 2024-05-22 10:51:59 -07:00
9f43dc5fc8 Update Cargo.lock 2024-05-22 10:50:30 -07:00
36dc589b32 Finish Rust implementation of ClientState 2024-05-22 10:50:10 -07:00
e7d6bccc60 Merge branch 'main' into coredump-enginecommandmanager 2024-05-21 12:30:21 -07:00
a76dcd76fc Implement structs for clientState
Including engineCommandManager and its engineConnection
2024-05-20 23:26:02 -07:00
4 changed files with 60 additions and 8 deletions

13
src-tauri/Cargo.lock generated
View File

@ -2567,7 +2567,7 @@ dependencies = [
[[package]] [[package]]
name = "kcl-lib" name = "kcl-lib"
version = "0.1.56" version = "0.1.57"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"approx", "approx",
@ -6059,9 +6059,8 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]] [[package]]
name = "ts-rs" name = "ts-rs"
version = "7.1.1" version = "8.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/Aleph-Alpha/ts-rs#badbac08e61e65b312880aa64e9ece2976f1bbef"
checksum = "fc2cae1fc5d05d47aa24b64f9a4f7cba24cdc9187a2084dd97ac57bef5eccae6"
dependencies = [ dependencies = [
"chrono", "chrono",
"thiserror", "thiserror",
@ -6072,11 +6071,9 @@ dependencies = [
[[package]] [[package]]
name = "ts-rs-macros" name = "ts-rs-macros"
version = "7.1.1" version = "8.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://github.com/Aleph-Alpha/ts-rs#badbac08e61e65b312880aa64e9ece2976f1bbef"
checksum = "73f7f9b821696963053a89a7bd8b292dc34420aea8294d7b225274d488f3ec92"
dependencies = [ dependencies = [
"Inflector",
"proc-macro2", "proc-macro2",
"quote", "quote",
"syn 2.0.65", "syn 2.0.65",

View File

@ -55,6 +55,10 @@ impl CoreDump for CoreDumper {
Ok(crate::coredump::WebrtcStats::default()) Ok(crate::coredump::WebrtcStats::default())
} }
async fn get_client_state(&self) -> Result<crate::coredump::ClientState> {
Ok(crate::coredump::ClientState::default())
}
async fn screenshot(&self) -> Result<String> { async fn screenshot(&self) -> Result<String> {
// Take a screenshot of the engine. // Take a screenshot of the engine.
todo!() todo!()

View File

@ -27,6 +27,8 @@ pub trait CoreDump: Clone {
async fn get_webrtc_stats(&self) -> Result<WebrtcStats>; async fn get_webrtc_stats(&self) -> Result<WebrtcStats>;
async fn get_client_state(&self) -> Result<ClientState>;
/// Return a screenshot of the app. /// Return a screenshot of the app.
async fn screenshot(&self) -> Result<String>; async fn screenshot(&self) -> Result<String>;
@ -64,6 +66,7 @@ pub trait CoreDump: Clone {
let webrtc_stats = self.get_webrtc_stats().await?; let webrtc_stats = self.get_webrtc_stats().await?;
let os = self.os().await?; let os = self.os().await?;
let screenshot_url = self.upload_screenshot().await?; let screenshot_url = self.upload_screenshot().await?;
let client_state = self.get_client_state().await?;
let mut app_info = AppInfo { let mut app_info = AppInfo {
version: self.version()?, version: self.version()?,
@ -74,6 +77,7 @@ pub trait CoreDump: Clone {
webrtc_stats, webrtc_stats,
github_issue_url: None, github_issue_url: None,
pool: self.pool()?, pool: self.pool()?,
client_state,
}; };
app_info.set_github_issue_url(&screenshot_url)?; app_info.set_github_issue_url(&screenshot_url)?;
@ -109,6 +113,9 @@ pub struct AppInfo {
/// Engine pool the client is connected to. /// Engine pool the client is connected to.
pub pool: String, pub pool: String,
/// The client state (singletons and xstate)
pub client_state: ClientState,
} }
impl AppInfo { impl AppInfo {
@ -197,3 +204,23 @@ pub struct WebrtcStats {
/// Packet jitter for this synchronizing source, measured in seconds. /// Packet jitter for this synchronizing source, measured in seconds.
pub jitter: f32, pub jitter: f32,
} }
/// Client State Structure
#[derive(Default, Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
#[ts(export)]
#[serde(rename_all = "snake_case")]
pub struct ClientState {
pub engine_command_manager: EngineCommandManager,
}
#[derive(Default, Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
#[ts(export)]
#[serde(rename_all = "snake_case")]
pub struct EngineCommandManager {
pub engine_connection: EngineConnection,
}
#[derive(Default, Debug, Clone, Deserialize, Serialize, PartialEq, ts_rs::TS, JsonSchema)]
#[ts(export)]
pub struct EngineConnection {
}

View File

@ -33,6 +33,9 @@ extern "C" {
#[wasm_bindgen(method, js_name = screenshot, catch)] #[wasm_bindgen(method, js_name = screenshot, catch)]
fn screenshot(this: &CoreDumpManager) -> Result<js_sys::Promise, js_sys::Error>; fn screenshot(this: &CoreDumpManager) -> Result<js_sys::Promise, js_sys::Error>;
#[wasm_bindgen(method, js_name = getWebrtcStats, catch)]
fn get_client_state(this: &CoreDumpManager) -> Result<js_sys::Promise, js_sys::Error>;
} }
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@ -140,4 +143,25 @@ impl CoreDump for CoreDumper {
Ok(s) Ok(s)
} }
async fn get_client_state(&self) -> Result<crate::coredump::ClientState> {
let promise = self
.manager
.get_client_state()
.map_err(|e| anyhow::anyhow!("Failed to get promise from get client state: {:?}", e))?;
let value = JsFuture::from(promise)
.await
.map_err(|e| anyhow::anyhow!("Failed to get response from client state: {:?}", e))?;
// Parse the value as a string.
let s = value
.as_string()
.ok_or_else(|| anyhow::anyhow!("Failed to get string from response from client stat: `{:?}`", value))?;
let client_state: crate::coredump::ClientState =
serde_json::from_str(&s).map_err(|e| anyhow::anyhow!("Failed to parse client state: {:?}", e))?;
Ok(client_state)
}
} }