diff options
Diffstat (limited to 'runtime/ops/web_worker.rs')
-rw-r--r-- | runtime/ops/web_worker.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/runtime/ops/web_worker.rs b/runtime/ops/web_worker.rs new file mode 100644 index 000000000..d88330a04 --- /dev/null +++ b/runtime/ops/web_worker.rs @@ -0,0 +1,37 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. + +use crate::web_worker::WebWorkerHandle; +use crate::web_worker::WorkerEvent; +use deno_core::futures::channel::mpsc; +use deno_core::serde_json::json; + +pub fn init( + rt: &mut deno_core::JsRuntime, + sender: mpsc::Sender<WorkerEvent>, + handle: WebWorkerHandle, +) { + // Post message to host as guest worker. + let sender_ = sender.clone(); + super::reg_json_sync( + rt, + "op_worker_post_message", + move |_state, _args, bufs| { + assert_eq!(bufs.len(), 1, "Invalid number of arguments"); + let msg_buf: Box<[u8]> = (*bufs[0]).into(); + sender_ + .clone() + .try_send(WorkerEvent::Message(msg_buf)) + .expect("Failed to post message to host"); + Ok(json!({})) + }, + ); + + // Notify host that guest worker closes. + super::reg_json_sync(rt, "op_worker_close", move |_state, _args, _bufs| { + // Notify parent that we're finished + sender.clone().close_channel(); + // Terminate execution of current worker + handle.terminate(); + Ok(json!({})) + }); +} |