diff options
author | Bert Belder <bertbelder@gmail.com> | 2020-09-06 02:34:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-06 02:34:02 +0200 |
commit | c821e8f2f1fb8ad5e9eb00854277cafc8c80b2f5 (patch) | |
tree | c429a3c2707a4047fb512443a8468b7e15e5730d /cli/ops/web_worker.rs | |
parent | 849431eb1d112d1f79f4a327830dc1a5bf22dd47 (diff) |
Move JSON ops to deno_core (#7336)
Diffstat (limited to 'cli/ops/web_worker.rs')
-rw-r--r-- | cli/ops/web_worker.rs | 119 |
1 files changed, 23 insertions, 96 deletions
diff --git a/cli/ops/web_worker.rs b/cli/ops/web_worker.rs index 023a4708c..9d8140d7b 100644 --- a/cli/ops/web_worker.rs +++ b/cli/ops/web_worker.rs @@ -1,112 +1,39 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use super::dispatch_json::{JsonOp, Value}; -use crate::ops::json_op; + use crate::state::State; use crate::web_worker::WebWorkerHandle; use crate::worker::WorkerEvent; -use deno_core::CoreIsolate; -use deno_core::CoreIsolateState; -use deno_core::ErrBox; -use deno_core::ZeroCopyBuf; +use deno_core::OpRegistry; use futures::channel::mpsc; -use std::convert::From; use std::rc::Rc; -pub fn web_worker_op<D>( - sender: mpsc::Sender<WorkerEvent>, - dispatcher: D, -) -> impl Fn( - &mut CoreIsolateState, - Value, - &mut [ZeroCopyBuf], -) -> Result<JsonOp, ErrBox> -where - D: Fn( - &mpsc::Sender<WorkerEvent>, - Value, - &mut [ZeroCopyBuf], - ) -> Result<JsonOp, ErrBox>, -{ - move |_isolate_state: &mut CoreIsolateState, - args: Value, - zero_copy: &mut [ZeroCopyBuf]| - -> Result<JsonOp, ErrBox> { dispatcher(&sender, args, zero_copy) } -} - -pub fn web_worker_op2<D>( - handle: WebWorkerHandle, - sender: mpsc::Sender<WorkerEvent>, - dispatcher: D, -) -> impl Fn( - &mut CoreIsolateState, - Value, - &mut [ZeroCopyBuf], -) -> Result<JsonOp, ErrBox> -where - D: Fn( - WebWorkerHandle, - &mpsc::Sender<WorkerEvent>, - Value, - &mut [ZeroCopyBuf], - ) -> Result<JsonOp, ErrBox>, -{ - move |_isolate_state: &mut CoreIsolateState, - args: Value, - zero_copy: &mut [ZeroCopyBuf]| - -> Result<JsonOp, ErrBox> { - dispatcher(handle.clone(), &sender, args, zero_copy) - } -} - pub fn init( - i: &mut CoreIsolate, s: &Rc<State>, sender: &mpsc::Sender<WorkerEvent>, handle: WebWorkerHandle, ) { - i.register_op( + // Post message to host as guest worker. + let sender_ = sender.clone(); + s.register_op_json_sync( "op_worker_post_message", - s.core_op(json_op(web_worker_op( - sender.clone(), - op_worker_post_message, - ))), - ); - i.register_op( - "op_worker_close", - s.core_op(json_op(web_worker_op2( - handle, - sender.clone(), - op_worker_close, - ))), + 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!({})) + }, ); -} - -/// Post message to host as guest worker -fn op_worker_post_message( - sender: &mpsc::Sender<WorkerEvent>, - _args: Value, - data: &mut [ZeroCopyBuf], -) -> Result<JsonOp, ErrBox> { - assert_eq!(data.len(), 1, "Invalid number of arguments"); - let d = Vec::from(&*data[0]).into_boxed_slice(); - let mut sender = sender.clone(); - sender - .try_send(WorkerEvent::Message(d)) - .expect("Failed to post message to host"); - Ok(JsonOp::Sync(json!({}))) -} -/// Notify host that guest worker closes -fn op_worker_close( - handle: WebWorkerHandle, - sender: &mpsc::Sender<WorkerEvent>, - _args: Value, - _data: &mut [ZeroCopyBuf], -) -> Result<JsonOp, ErrBox> { - let mut sender = sender.clone(); - // Notify parent that we're finished - sender.close_channel(); - // Terminate execution of current worker - handle.terminate(); - Ok(JsonOp::Sync(json!({}))) + // Notify host that guest worker closes. + let sender_ = sender.clone(); + s.register_op_json_sync("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!({})) + }); } |