From fc1c54dde052d6a967d5f185604b3f79b1ba2fbb Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 1 Oct 2018 19:43:27 -0400 Subject: [PATCH] Adjust how handle_read handle_write function. Use tokio_io::io::read() and tokio_io::io::write_all() instead of poll_fn() as suggested in the Tokio gitter. --- src/handlers.rs | 98 ++++++++++++++++++++++++------------------------- 1 file changed, 47 insertions(+), 51 deletions(-) diff --git a/src/handlers.rs b/src/handlers.rs index db464f4072..c27543d338 100644 --- a/src/handlers.rs +++ b/src/handlers.rs @@ -30,8 +30,7 @@ use std::time::UNIX_EPOCH; use std::time::{Duration, Instant}; use tokio; use tokio::timer::Delay; -use tokio_io::AsyncRead; -use tokio_io::AsyncWrite; +use tokio_io; use tokio_threadpool; type OpResult = DenoResult; @@ -611,31 +610,29 @@ fn handle_read( errors::ErrorKind::BadFileDescriptor, String::from("Bad File Descriptor"), )), - Some(mut resource) => { - let op = futures::future::poll_fn(move || { - let poll = resource.poll_read(data); - poll - }).map_err(|err| DenoError::from(err)) - .and_then(move |nread: usize| { - let builder = &mut FlatBufferBuilder::new(); - let msg = msg::ReadRes::create( - builder, - &msg::ReadResArgs { - nread: nread as u32, - eof: nread == 0, - ..Default::default() - }, - ); - Ok(serialize_response( - cmd_id, - builder, - msg::BaseArgs { - msg: Some(msg.as_union_value()), - msg_type: msg::Any::ReadRes, - ..Default::default() - }, - )) - }); + Some(resource) => { + let op = tokio_io::io::read(resource, data) + .map_err(|err| DenoError::from(err)) + .and_then(move |(_resource, _buf, nread)| { + let builder = &mut FlatBufferBuilder::new(); + let msg = msg::ReadRes::create( + builder, + &msg::ReadResArgs { + nread: nread as u32, + eof: nread == 0, + ..Default::default() + }, + ); + Ok(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + msg: Some(msg.as_union_value()), + msg_type: msg::Any::ReadRes, + ..Default::default() + }, + )) + }); Box::new(op) } } @@ -655,30 +652,29 @@ fn handle_write( errors::ErrorKind::BadFileDescriptor, String::from("Bad File Descriptor"), )), - Some(mut resource) => { - let op = futures::future::poll_fn(move || { - let poll = resource.poll_write(data); - poll - }).map_err(|err| DenoError::from(err)) - .and_then(move |bytes_written: usize| { - let builder = &mut FlatBufferBuilder::new(); - let msg = msg::WriteRes::create( - builder, - &msg::WriteResArgs { - nbyte: bytes_written as u32, - ..Default::default() - }, - ); - Ok(serialize_response( - cmd_id, - builder, - msg::BaseArgs { - msg: Some(msg.as_union_value()), - msg_type: msg::Any::WriteRes, - ..Default::default() - }, - )) - }); + Some(resource) => { + let len = data.len(); + let op = tokio_io::io::write_all(resource, data) + .map_err(|err| DenoError::from(err)) + .and_then(move |(_resource, _buf)| { + let builder = &mut FlatBufferBuilder::new(); + let msg = msg::WriteRes::create( + builder, + &msg::WriteResArgs { + nbyte: len as u32, + ..Default::default() + }, + ); + Ok(serialize_response( + cmd_id, + builder, + msg::BaseArgs { + msg: Some(msg.as_union_value()), + msg_type: msg::Any::WriteRes, + ..Default::default() + }, + )) + }); Box::new(op) } }