diff options
author | Aaron O'Mullan <aaron.omullan@gmail.com> | 2021-05-03 01:22:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-02 19:22:57 -0400 |
commit | 8377957666d6ca80d48d6fa78afd3e16bf3f7aa8 (patch) | |
tree | 071564d391846624c18b81cdccf3350c2e73ed13 /runtime/ops/web_worker.rs | |
parent | 40961cda583faaba128b555caebf284fd6298bb1 (diff) |
refactor(runtime): use Extensions (#10461)
Diffstat (limited to 'runtime/ops/web_worker.rs')
-rw-r--r-- | runtime/ops/web_worker.rs | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/runtime/ops/web_worker.rs b/runtime/ops/web_worker.rs index 68cef110c..17b72cb38 100644 --- a/runtime/ops/web_worker.rs +++ b/runtime/ops/web_worker.rs @@ -4,34 +4,37 @@ use crate::web_worker::WebWorkerHandle; use crate::web_worker::WorkerEvent; use deno_core::error::null_opbuf; use deno_core::futures::channel::mpsc; +use deno_core::op_sync; +use deno_core::Extension; -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_sync( - rt, - "op_worker_post_message", - move |_state, _args: (), buf| { - let buf = buf.ok_or_else(null_opbuf)?; - let msg_buf: Box<[u8]> = (*buf).into(); - sender_ - .clone() - .try_send(WorkerEvent::Message(msg_buf)) - .expect("Failed to post message to host"); - Ok(()) - }, - ); - - // Notify host that guest worker closes. - super::reg_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(()) - }); +pub fn init() -> Extension { + Extension::builder() + .ops(vec![ + ( + "op_worker_post_message", + op_sync(move |state, _args: (), buf| { + let buf = buf.ok_or_else(null_opbuf)?; + let msg_buf: Box<[u8]> = (*buf).into(); + let mut sender = state.borrow::<mpsc::Sender<WorkerEvent>>().clone(); + sender + .try_send(WorkerEvent::Message(msg_buf)) + .expect("Failed to post message to host"); + Ok(()) + }), + ), + // Notify host that guest worker closes. + ( + "op_worker_close", + op_sync(move |state, _args: (), _bufs| { + // Notify parent that we're finished + let mut sender = state.borrow::<mpsc::Sender<WorkerEvent>>().clone(); + sender.close_channel(); + // Terminate execution of current worker + let handle = state.borrow::<WebWorkerHandle>(); + handle.terminate(); + Ok(()) + }), + ), + ]) + .build() } |