Use tokio_core instead of runtime as top loop

This commit is contained in:
Tangent 128 2018-04-15 01:21:00 -04:00
parent 49541347a4
commit ee82846590
3 changed files with 14 additions and 6 deletions

1
Cargo.lock generated
View File

@ -598,6 +598,7 @@ dependencies = [
"hyper 0.11.25 (registry+https://github.com/rust-lang/crates.io-index)",
"odds 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-core 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-io 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
]

View File

@ -10,4 +10,5 @@ futures = "0.1.20"
hyper = "0.11.25"
odds = { version = "0.3.1", features = ["std-vec"] }
tokio = "0.1.5"
tokio-core = "0.1.17"
tokio-io = "0.1.6"

View File

@ -2,6 +2,7 @@
extern crate futures;
extern crate hyper;
extern crate tokio;
extern crate tokio_core;
extern crate tokio_io;
extern crate webmetro;
@ -9,6 +10,7 @@ mod commands;
use clap::{App, AppSettings};
use futures::prelude::*;
use tokio_core::reactor::Core;
use webmetro::error::WebmetroError;
use commands::{
@ -30,7 +32,10 @@ fn options() -> App<'static, 'static> {
fn main() {
let args = options().get_matches();
tokio_run(match args.subcommand() {
let core = Core::new().unwrap();
let handle = core.handle();
tokio_run(core, match args.subcommand() {
("filter", Some(sub_args)) => box_up(filter::run(sub_args)),
("relay", Some(sub_args)) => box_up(relay::run(sub_args)),
("dump", Some(sub_args)) => box_up(dump::run(sub_args)),
@ -42,14 +47,15 @@ fn main() {
});
}
fn tokio_run(task: Box<Future<Item=(), Error=WebmetroError> + Send + 'static>) {
tokio::run(task.into_future().map_err(|err| {
fn tokio_run(mut core: Core, task: Box<Future<Item=(), Error=WebmetroError>>) {
core.run(task.into_future()).unwrap_or_else(|err| {
eprintln!("Error: {}", err);
::std::process::exit(1);
}));
});
}
fn box_up<F: IntoFuture<Item=(), Error=WebmetroError>>(task: F) -> Box<Future<Item=(), Error=WebmetroError> + Send + 'static>
where F::Future: Send + 'static {
fn box_up<F: IntoFuture<Item=(), Error=WebmetroError>>(task: F) -> Box<Future<Item=(), Error=WebmetroError>>
where F::Future: 'static
{
Box::new(task.into_future())
}