diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 77 | ||||
| -rw-r--r-- | src/serve.rs | 12 |
2 files changed, 41 insertions, 48 deletions
diff --git a/src/main.rs b/src/main.rs index 3ba3efa..d5cadd8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,9 +16,8 @@ use std::process; use std::thread; use std::sync::mpsc; -use hyper::{Client, Server, Request}; +use hyper::{Client, Request}; use hyper::body::Body; -use hyper::service::service_fn; use tokio::runtime::Runtime; use futures::Future; @@ -59,19 +58,11 @@ fn main() { process::exit(1); } - let addr = "0.0.0.0:51497".parse().unwrap(); - - let server = Server::bind(&addr) - .serve(|| service_fn(serve::response_examples)) - .map_err(|e| eprintln!("server error: {}", e)); - - println!("Listening on http://{}", addr); - let mut rt = Runtime::new().unwrap(); - rt.spawn(server); - let client = Client::new(); + serve::run(&mut rt); + let client = Client::new(); let req1 = Request::builder() .method("POST") .uri("http://10.5.1.201:38400/serviceControl/AVTransport") @@ -80,30 +71,14 @@ fn main() { .body(Body::from(notify::BODY_SET_URI)) .unwrap(); - // let req2 = Request::builder() - // .method("POST") - // .uri("http://10.5.1.201:38400/serviceControl/AVTransport") - // .header("Content-Type", "text/xml") - // .header("SOAPACTION", notify::A_STOP) - // .body(Body::from(notify::BODY_STOP)) - // .unwrap(); - let f = client .request(req1) - .map(|res| { + .map(|_res| { println!("OK") }) - .map_err(|err| { + .map_err(|_err| { println!("Something bad happened"); }); - // .and_then(move |_| { - // client.request(req2).map(|res| { - // println!("OK"); - // }).map_err(|err| { - // println!("Something bad2"); - // }) - // }); - rt.spawn(f); @@ -111,6 +86,8 @@ fn main() { // upnp::discover(); // }); + let playing = true; + let (tx, rx) = mpsc::channel(); let child = thread::spawn(move || { let mut controller = cli::Controller::init(); @@ -121,18 +98,34 @@ fn main() { break; } if c == 32 { - let req2 = Request::builder() - .method("POST") - .uri("http://10.5.1.201:38400/serviceControl/AVTransport") - .header("Content-Type", "text/xml") - .header("SOAPACTION", notify::A_PLAY) - .body(Body::from(notify::BODY_PLAY)) - .unwrap(); - let f = client.request(req2).map(|res| { - println!("OK"); - }).map_err(|err| { - println!("Err"); - }); + let req2 = if playing { + Request::builder() + .method("POST") + .uri("http://10.5.1.201:38400/serviceControl/AVTransport") + .header("Content-Type", "text/xml") + .header("SOAPACTION", notify::A_STOP) + .body(Body::from(notify::BODY_STOP)) + .unwrap() + } + else { + Request::builder() + .method("POST") + .uri("http://10.5.1.201:38400/serviceControl/AVTransport") + .header("Content-Type", "text/xml") + .header("SOAPACTION", notify::A_PLAY) + .body(Body::from(notify::BODY_PLAY)) + .unwrap() + }; + + let f = client + .request(req2) + .map(|_res| { + println!("OK"); + }) + .map_err(|_err| { + println!("Err"); + }); + rt.spawn(f); } } diff --git a/src/serve.rs b/src/serve.rs index 9ff51a2..18b9642 100644 --- a/src/serve.rs +++ b/src/serve.rs @@ -6,26 +6,26 @@ extern crate tokio_io; use self::futures::{future, Future}; use self::hyper::{Body, Method, Request, Response, Server, StatusCode}; use self::hyper::service::service_fn; +use tokio::runtime::Runtime; use std::io; static NOTFOUND: &[u8] = b"Not Found"; -pub fn run() { +pub fn run(rt: &mut Runtime) { let addr = "0.0.0.0:51497".parse().unwrap(); - let server = Server::bind(&addr) - .serve(|| service_fn(response_examples)) + .serve(|| service_fn(routes)) .map_err(|e| eprintln!("server error: {}", e)); - println!("Listening on http://{}", addr); + rt.spawn(server); - hyper::rt::run(server); + println!("Listening on http://{}", addr); } type ResponseFuture = Box<Future<Item=Response<Body>, Error=io::Error> + Send>; -pub fn response_examples(req: Request<Body>) -> ResponseFuture { +fn routes(req: Request<Body>) -> ResponseFuture { match (req.method(), req.uri().path()) { (&Method::GET, "/0") => { simple_file_send("/home/yuval/Videos/0") |
