diff --git a/src/lang/std/engineConnection.ts b/src/lang/std/engineConnection.ts index eaa5d268d..887ca9e07 100644 --- a/src/lang/std/engineConnection.ts +++ b/src/lang/std/engineConnection.ts @@ -575,7 +575,6 @@ export class EngineCommandManager { if (commandStr === undefined) { throw new Error('commandStr is undefined') } - console.log('sendModelingCommandFromWasm', id, rangeStr, commandStr) const command: EngineCommand = JSON.parse(commandStr) const range: SourceRange = JSON.parse(rangeStr) diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index 2f726ed3f..af3c0521d 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -419,9 +419,9 @@ dependencies = [ [[package]] name = "kittycad" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "265907330acc7c97b6b2de171554e1354ed300ced20751fc0e40c88117a2d597" +checksum = "0443a9f76cee80d5a43d076028d3ce39d2f6f6b66fc5c1a0ce24f8d7caf733b9" dependencies = [ "anyhow", "base64", diff --git a/src/wasm-lib/src/engine/conn_noweb.rs b/src/wasm-lib/src/engine/conn_noweb.rs index 1cba3baa3..441c9fa2c 100644 --- a/src/wasm-lib/src/engine/conn_noweb.rs +++ b/src/wasm-lib/src/engine/conn_noweb.rs @@ -3,7 +3,7 @@ use anyhow::Result; use futures::{SinkExt, StreamExt}; -use kittycad::types::{WebSocketMessages, WebSocketResponses}; +use kittycad::types::{OkWebSocketResponseData, WebSocketRequest, WebSocketResponse}; use tokio_tungstenite::tungstenite::Message as WsMsg; use crate::errors::{KclError, KclErrorDetails}; @@ -35,14 +35,14 @@ pub struct TcpRead { } impl TcpRead { - pub async fn read(&mut self) -> Result { + pub async fn read(&mut self) -> Result { let msg = self.stream.next().await.unwrap()?; let msg = match msg { WsMsg::Text(text) => text, WsMsg::Binary(bin) => bincode::deserialize(&bin)?, other => anyhow::bail!("Unexpected websocket message from server: {}", other), }; - let msg = serde_json::from_str::(&msg)?; + let msg = serde_json::from_str::(&msg)?; Ok(msg) } } @@ -68,19 +68,26 @@ impl EngineConnection { let tcp_read_handle = tokio::spawn(async move { // Get Websocket messages from API server - while let Ok(msg) = tcp_read.read().await { - match msg { - WebSocketResponses::IceServerInfo { ice_servers } => { - println!("got ice server info: {:?}", ice_servers); + while let Ok(ws_resp) = tcp_read.read().await { + if !ws_resp.success { + println!("got ws errors: {:?}", ws_resp.errors); + continue; + } + + if let Some(msg) = ws_resp.resp { + match msg { + OkWebSocketResponseData::IceServerInfo { ice_servers } => { + println!("got ice server info: {:?}", ice_servers); + } + OkWebSocketResponseData::SdpAnswer { answer } => { + println!("got sdp answer: {:?}", answer); + } + OkWebSocketResponseData::TrickleIce { candidate } => { + println!("got trickle ice: {:?}", candidate); + } + OkWebSocketResponseData::Modeling { .. } => {} + OkWebSocketResponseData::Export { .. } => {} } - WebSocketResponses::SdpAnswer { answer } => { - println!("got sdp answer: {:?}", answer); - } - WebSocketResponses::TrickleIce { candidate } => { - println!("got trickle ice: {:?}", candidate); - } - WebSocketResponses::Modeling { .. } => {} - WebSocketResponses::Export { .. } => {} } } }); @@ -91,7 +98,7 @@ impl EngineConnection { }) } - pub async fn tcp_send(&mut self, msg: WebSocketMessages) -> Result<()> { + pub async fn tcp_send(&mut self, msg: WebSocketRequest) -> Result<()> { let msg = serde_json::to_string(&msg)?; self.tcp_write.send(WsMsg::Text(msg)).await?; @@ -105,7 +112,7 @@ impl EngineConnection { cmd: kittycad::types::ModelingCmd, ) -> Result<(), KclError> { futures::executor::block_on( - self.tcp_send(WebSocketMessages::ModelingCmdReq { cmd, cmd_id: id }), + self.tcp_send(WebSocketRequest::ModelingCmdReq { cmd, cmd_id: id }), ) .map_err(|e| { KclError::Engine(KclErrorDetails { diff --git a/src/wasm-lib/src/engine/conn_web.rs b/src/wasm-lib/src/engine/conn_web.rs index b2f249c37..94c4bcb24 100644 --- a/src/wasm-lib/src/engine/conn_web.rs +++ b/src/wasm-lib/src/engine/conn_web.rs @@ -2,7 +2,7 @@ //! engine. use anyhow::Result; -use kittycad::types::WebSocketMessages; +use kittycad::types::WebSocketRequest; use wasm_bindgen::prelude::*; use crate::errors::{KclError, KclErrorDetails}; @@ -43,7 +43,7 @@ impl EngineConnection { source_ranges: vec![source_range], }) })?; - let ws_msg = WebSocketMessages::ModelingCmdReq { cmd, cmd_id: id }; + let ws_msg = WebSocketRequest::ModelingCmdReq { cmd, cmd_id: id }; let cmd_str = serde_json::to_string(&ws_msg).map_err(|e| { KclError::Engine(KclErrorDetails { message: format!("Failed to serialize modeling command: {:?}", e), diff --git a/src/wasm-lib/src/export.rs b/src/wasm-lib/src/export.rs index 021e8ac6d..2cd120bb1 100644 --- a/src/wasm-lib/src/export.rs +++ b/src/wasm-lib/src/export.rs @@ -5,9 +5,16 @@ use wasm_bindgen::prelude::*; #[wasm_bindgen] pub fn deserialize_files(data: &[u8]) -> Result { - let ws_resp: kittycad::types::WebSocketResponses = bincode::deserialize(data)?; + let ws_resp: kittycad::types::WebSocketResponse = bincode::deserialize(data)?; - if let kittycad::types::WebSocketResponses::Export { files } = ws_resp { + if !ws_resp.success { + return Err(JsError::new(&format!( + "Server returned error: {:?}", + ws_resp.errors + ))); + } + + if let Some(kittycad::types::OkWebSocketResponseData::Export { files }) = ws_resp.resp { return Ok(JsValue::from_serde(&files)?); }