From b96836f07be748dfe977423c7b34f4d334d97772 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Mon, 2 Oct 2023 16:12:01 +0100 Subject: [PATCH] [wasm-client] keeping ownership over 'ReceivedBufferRequestSender' channel when spawning 'ResponsePusher' --- common/task/src/manager.rs | 2 +- wasm/client/Makefile | 3 +++ wasm/client/internal-dev/package.json | 2 +- wasm/client/internal-dev/webpack.config.js | 2 +- wasm/client/internal-dev/yarn.lock | 4 ++-- wasm/client/src/response_pusher.rs | 11 ++++++++++- 6 files changed, 18 insertions(+), 6 deletions(-) diff --git a/common/task/src/manager.rs b/common/task/src/manager.rs index a59ae545d9..03e92f05cf 100644 --- a/common/task/src/manager.rs +++ b/common/task/src/manager.rs @@ -434,7 +434,7 @@ impl TaskClient { .await { self.log(Level::Error, "Task stopped without shutdown called"); - panic!("{timeout}") + panic!("{:?}: {timeout}", self.name) } } diff --git a/wasm/client/Makefile b/wasm/client/Makefile index bae17f2713..ffca08583c 100644 --- a/wasm/client/Makefile +++ b/wasm/client/Makefile @@ -5,6 +5,9 @@ build: wasm-pack build --scope nymproject --target web --out-dir ../../dist/wasm/client wasm-opt -Oz -o ../../dist/wasm/client/nym_client_wasm_bg.wasm ../../dist/wasm/client/nym_client_wasm_bg.wasm +build-debug-dev: + wasm-pack build --scope nymproject --target no-modules + build-rust-node: wasm-pack build --scope nymproject --target nodejs --out-dir ../../dist/node/wasm/client wasm-opt -Oz -o ../../dist/node/wasm/client/nym_client_wasm_bg.wasm ../../dist/node/wasm/client/nym_client_wasm_bg.wasm diff --git a/wasm/client/internal-dev/package.json b/wasm/client/internal-dev/package.json index 3c15217913..e653cfd88e 100644 --- a/wasm/client/internal-dev/package.json +++ b/wasm/client/internal-dev/package.json @@ -35,6 +35,6 @@ "webpack-dev-server": "^4.7.4" }, "dependencies": { - "@nymproject/nym-client-wasm": "file:../../../dist/wasm/client" + "@nymproject/nym-client-wasm": "file:../pkg" } } diff --git a/wasm/client/internal-dev/webpack.config.js b/wasm/client/internal-dev/webpack.config.js index 369c59093f..bc1242190d 100644 --- a/wasm/client/internal-dev/webpack.config.js +++ b/wasm/client/internal-dev/webpack.config.js @@ -22,7 +22,7 @@ module.exports = { patterns: [ 'index.html', { - from: '../../../dist/wasm/client/*.(js|wasm)', + from: '../pkg/*.(js|wasm)', to: '[name][ext]', }, ], diff --git a/wasm/client/internal-dev/yarn.lock b/wasm/client/internal-dev/yarn.lock index d74175fc43..60952d00e8 100644 --- a/wasm/client/internal-dev/yarn.lock +++ b/wasm/client/internal-dev/yarn.lock @@ -73,8 +73,8 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nymproject/nym-client-wasm@file:../../../dist/wasm/client": - version "1.2.0-rc.2" +"@nymproject/nym-client-wasm@file:../pkg": + version "1.2.0-rc.9" "@types/body-parser@*": version "1.19.2" diff --git a/wasm/client/src/response_pusher.rs b/wasm/client/src/response_pusher.rs index 42d88a86c8..e0a795a79b 100644 --- a/wasm/client/src/response_pusher.rs +++ b/wasm/client/src/response_pusher.rs @@ -8,12 +8,16 @@ use wasm_bindgen::JsValue; use wasm_bindgen_futures::spawn_local; use wasm_client_core::client::base_client::ClientOutput; use wasm_client_core::client::received_buffer::{ - ReceivedBufferMessage, ReconstructedMessagesReceiver, + ReceivedBufferMessage, ReceivedBufferRequestSender, ReconstructedMessagesReceiver, }; use wasm_utils::console_error; pub(crate) struct ResponsePusher { reconstructed_receiver: ReconstructedMessagesReceiver, + + // we need to keep that channel alive as not to trigger the shutdown + _received_buffer_request_sender: ReceivedBufferRequestSender, + on_message: js_sys::Function, } @@ -36,12 +40,17 @@ impl ResponsePusher { ResponsePusher { reconstructed_receiver, + _received_buffer_request_sender: client_output.received_buffer_request_sender, on_message, } } pub(crate) fn start(mut self) { spawn_local(async move { + // for some reason if this channel is not explicitly moved into the block, + // it gets dropped when spawning the promise + let _request_sender = self._received_buffer_request_sender; + let this = JsValue::null(); while let Some(reconstructed) = self.reconstructed_receiver.next().await {