[Solved] ECE421 Assignment 8 Rust and WebAssembly
5.0
1 customer review
Digital download
Digital download
$25.00
Message us on WhatsApp for payment or download support.
| 1 use hyper::rt::Future;2 use hyper::service::service_fn_ok;3 use hyper::{Body, Request, Response, Server};78 fn main() {9 let addr = ([127, 0, 0, 1], 3000).into();10 let server = Server::bind(&addr)11 .serve(|| { 12 service_fn(service_router)13 })14 .map_err(|e| eprintln!(server error: {}, e));1516 println!(Listening on http://{}, addr);17 hyper::rt::run(server);18 }1920 fn svc_wait(t: u64) -> impl Future<Item = (), Error = ()> {21 println!([start] waiting);22 let when = Instant::now() + Duration::from_millis(t);23 Delay::new(when)24 .map_err(|e| panic!(timer failed; err={:?}, e))25 .and_then(|_| {26 println!([end] waiting);27 Ok(())28 })29 }303132 fn fetch_data() -> impl Future<Item = future::FutureResult<RespStruct, 33 String>, Error = ()> {34 let uri: Uri = http://httpbin.org/get.parse().expect(Cannot parse35 URL);36 Client::new()37 .get(uri)38 // Future is polled here39 .and_then(|res| { 40 res.into_body().concat2()41 })42 .map_err(|err| println!(error: {}, err)) |
| 43 .map(|body| {44 let decoded: RespStruct =45 serde_json::from_slice(&body).expect(Couldnt deserialize);46 future::ok(decoded)47 })48 }495051 type BoxFut = Box<dyn Future<Item = Response<Body>, Error = hyper::Error>52 + Send>;535455 fn service_router(req: Request<Body>) -> BoxFut {56 let mut response = Response::new(Body::empty());5758 match (req.method(), req.uri().path()) {606162 (&Method::GET, /wait) => {63 let r = svc_wait(1500);64 hyper::rt::spawn(r);65 *response.body_mut() = Body::from(format!(Triggered waiting66 {}ms, 1500));67 }686970 (&Method::GET, /fetch) => {71 let r = fetch_data().map(|x| {72 println!(got data: {:?}, x);73 });74 hyper::rt::spawn(r);75 *response.body_mut() = Body::from(Sent request to external76 webservice);77 }7879 // more routers80 }81 eprintln!(Returning a response);82 Box::new(future::ok(response)) 83 } |
| #![feature(asm)] fn main() {let message = String::from(James, you are completely mad ); syscall(message);} #[cfg(target_os = linux)] fn syscall(message: String) { let msg_ptr = message.as_ptr(); let len = message.len(); unsafe { asm!(mov $$1, %rax # mov $$1, %rdi # mov $0, %rsi # mov $1, %rdx # syscall # :: r(msg_ptr), r(len))}} |