diff --git a/src/wasm-lib/Cargo.lock b/src/wasm-lib/Cargo.lock index 9e6b6f235..e69eac223 100644 --- a/src/wasm-lib/Cargo.lock +++ b/src/wasm-lib/Cargo.lock @@ -1426,7 +1426,7 @@ dependencies = [ [[package]] name = "kcl-lib" -version = "0.1.39" +version = "0.1.40" dependencies = [ "anyhow", "async-recursion", diff --git a/src/wasm-lib/kcl/Cargo.toml b/src/wasm-lib/kcl/Cargo.toml index d95d7bafc..69b852507 100644 --- a/src/wasm-lib/kcl/Cargo.toml +++ b/src/wasm-lib/kcl/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "kcl-lib" description = "KittyCAD Language implementation and tools" -version = "0.1.39" +version = "0.1.40" edition = "2021" license = "MIT" repository = "https://github.com/KittyCAD/modeling-app" diff --git a/src/wasm-lib/kcl/src/engine/conn.rs b/src/wasm-lib/kcl/src/engine/conn.rs index 356211a6f..0ff96c0e6 100644 --- a/src/wasm-lib/kcl/src/engine/conn.rs +++ b/src/wasm-lib/kcl/src/engine/conn.rs @@ -69,7 +69,16 @@ impl EngineConnection { async fn start_write_actor(mut tcp_write: WebSocketTcpWrite, mut engine_req_rx: mpsc::Receiver) { while let Some(req) = engine_req_rx.recv().await { let ToEngineReq { req, request_sent } = req; - let res = Self::inner_send_to_engine(req, &mut tcp_write).await; + let res = if let kittycad::types::WebSocketRequest::ModelingCmdReq { cmd, cmd_id: _ } = &req { + if let kittycad::types::ModelingCmd::ImportFiles { .. } = cmd { + // Send it as binary. + Self::inner_send_to_engine_binary(req, &mut tcp_write).await + } else { + Self::inner_send_to_engine(req, &mut tcp_write).await + } + } else { + Self::inner_send_to_engine(req, &mut tcp_write).await + }; let _ = request_sent.send(res); } } @@ -84,6 +93,16 @@ impl EngineConnection { Ok(()) } + /// Send the given `request` to the engine via the WebSocket connection `tcp_write` as binary. + async fn inner_send_to_engine_binary(request: WebSocketRequest, tcp_write: &mut WebSocketTcpWrite) -> Result<()> { + let msg = bson::to_vec(&request).map_err(|e| anyhow!("could not serialize bson: {e}"))?; + tcp_write + .send(WsMsg::Binary(msg)) + .await + .map_err(|e| anyhow!("could not send json over websocket: {e}"))?; + Ok(()) + } + pub async fn new(ws: reqwest::Upgraded) -> Result { let ws_stream = tokio_tungstenite::WebSocketStream::from_raw_socket( ws,