summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main.rs77
-rw-r--r--src/serve.rs12
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")