diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-01-21 17:50:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-21 17:50:06 +0100 |
commit | ecd1d3abb0cae9c7cbc1330cbaa035a5786e94d7 (patch) | |
tree | 73d4b12a06f5f6a6bc0e7168e0021efc3a2eda7c /cli/ops/web_worker.rs | |
parent | 229eb292f83dedbc32dc24f912841caf79a53e9c (diff) |
refactor: split cli::Worker (#3735)
* cli::Worker is base struct to create specialized workers
* add MainWorker
* add CompilerWorker
* refactor WebWorker to use Worker
Diffstat (limited to 'cli/ops/web_worker.rs')
-rw-r--r-- | cli/ops/web_worker.rs | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/cli/ops/web_worker.rs b/cli/ops/web_worker.rs index 300a0dfd1..be987c09f 100644 --- a/cli/ops/web_worker.rs +++ b/cli/ops/web_worker.rs @@ -11,10 +11,6 @@ use futures::sink::SinkExt; use futures::stream::StreamExt; use std; use std::convert::From; -use std::future::Future; -use std::pin::Pin; -use std::task::Context; -use std::task::Poll; pub fn init(i: &mut Isolate, s: &ThreadSafeState) { i.register_op( @@ -27,33 +23,16 @@ pub fn init(i: &mut Isolate, s: &ThreadSafeState) { ); } -struct GetMessageFuture { - state: ThreadSafeState, -} - -impl Future for GetMessageFuture { - type Output = Option<Buf>; - - fn poll(self: Pin<&mut Self>, cx: &mut Context) -> Poll<Self::Output> { - let inner = self.get_mut(); - let mut channels = inner.state.worker_channels.lock().unwrap(); - let receiver = &mut channels.receiver; - receiver.poll_next_unpin(cx) - } -} - /// Get message from host as guest worker fn op_worker_get_message( state: &ThreadSafeState, _args: Value, _data: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { - let op = GetMessageFuture { - state: state.clone(), - }; - + let state_ = state.clone(); let op = async move { - let maybe_buf = op.await; + let mut receiver = state_.worker_channels.receiver.lock().await; + let maybe_buf = receiver.next().await; debug!("op_worker_get_message"); Ok(json!({ "data": maybe_buf })) }; @@ -68,8 +47,7 @@ fn op_worker_post_message( data: Option<PinnedBuf>, ) -> Result<JsonOp, ErrBox> { let d = Vec::from(data.unwrap().as_ref()).into_boxed_slice(); - let mut channels = state.worker_channels.lock().unwrap(); - let sender = &mut channels.sender; + let mut sender = state.worker_channels.sender.clone(); futures::executor::block_on(sender.send(d)) .map_err(|e| DenoError::new(ErrorKind::Other, e.to_string()))?; |