use std::io;
use tokio_core::reactor::Core;
use futures::Future;
use relay::tcprelay::local::run as run_tcp;
use relay::udprelay::local::run as run_udp;
use relay::Context;
use config::Config;
pub fn run(config: Config) -> io::Result<()> {
let mut lp = try!(Core::new());
let handle = lp.handle();
let enable_udp = config.enable_udp;
let context = Context::new(handle, config);
Context::set(&context, move || if enable_udp {
let tcp_fut = run_tcp();
let udp_fut = run_udp();
lp.run(tcp_fut.join(udp_fut).map(|_| ()))
} else {
let tcp_fut = run_tcp();
lp.run(tcp_fut)
})
}