From 89895751867bcf0a3494962d0f44bbbeb7663d3e Mon Sep 17 00:00:00 2001 From: Tim Kuehn Date: Fri, 8 Jan 2016 02:39:15 -0800 Subject: [PATCH] Set up Cargo.toml --- src/macros/Cargo.toml | 8 ++++ src/{macro => macros/src}/lib.rs | 70 ++++++++++---------------------- src/macros/src/main.rs | 37 +++++++++++++++++ 3 files changed, 67 insertions(+), 48 deletions(-) create mode 100644 src/macros/Cargo.toml rename src/{macro => macros/src}/lib.rs (63%) create mode 100644 src/macros/src/main.rs diff --git a/src/macros/Cargo.toml b/src/macros/Cargo.toml new file mode 100644 index 0000000..a7b4b1a --- /dev/null +++ b/src/macros/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "macros" +version = "0.1.0" +authors = ["Adam Wright ", "Tim Kuehn "] + +[dependencies] +rustc-serialize = "*" +byteorder = "*" diff --git a/src/macro/lib.rs b/src/macros/src/lib.rs similarity index 63% rename from src/macro/lib.rs rename to src/macros/src/lib.rs index 0edba92..93c57af 100644 --- a/src/macro/lib.rs +++ b/src/macros/src/lib.rs @@ -1,8 +1,8 @@ #![feature(concat_idents)] extern crate rustc_serialize; extern crate byteorder; -use std::net::{TcpListener, TcpStream}; +#[macro_export] macro_rules! rpc { ($server:ident: $($fn_name:ident($in_:ty) -> $out:ty;)* ) => { mod $server { @@ -18,23 +18,26 @@ macro_rules! rpc { )* fn handle_request(self, mut conn: TcpStream) -> Result<(), io::Error> { - let len = try!(conn.read_u64::()); - let mut buf = vec![0; len as usize]; - try!(conn.read_exact(&mut buf)); - let s = String::from_utf8(buf).unwrap(); - let request: Request = json::decode(&s).unwrap(); - println!("Received Request: {:?}", request); - match request { - $( - Request::$fn_name(in_) => { - println!("Generating resp..."); - let resp = self.$fn_name(in_); - println!("Response: {:?}", resp); - let resp = json::encode(&resp).unwrap(); - try!(conn.write_u64::(resp.len() as u64)); - conn.write_all(resp.as_bytes()) - } - )* + loop { + let len = try!(conn.read_u64::()); + println!("Server: Reading {} bytes...", len); + let mut buf = vec![0; len as usize]; + try!(conn.read_exact(&mut buf)); + let s = String::from_utf8(buf).unwrap(); + let request: Request = json::decode(&s).unwrap(); + println!("Received Request: {:?}", request); + match request { + $( + Request::$fn_name(in_) => { + println!("Generating resp..."); + let resp = self.$fn_name(in_); + println!("Response: {:?}", resp); + let resp = json::encode(&resp).unwrap(); + try!(conn.write_u64::(resp.len() as u64)); + try!(conn.write_all(resp.as_bytes())); + } + )* + } } } } @@ -60,6 +63,7 @@ macro_rules! rpc { try!(conn.write_all(request.as_bytes())); let len = try!(conn.read_u64::()); let mut buf = vec![0; len as usize]; + println!("Client: Reading {} bytes", len); try!(conn.read_exact(&mut buf)); let s = String::from_utf8(buf).unwrap(); Ok(json::decode(&s).unwrap()) @@ -93,33 +97,3 @@ macro_rules! rpc { } } } - -rpc!(my_server: - hello(String) -> (); - add((i32, i32)) -> i32; -); - -use my_server::*; - -impl Service for () { - fn hello(&self, s: String) { - println!("Hello, {}", s); - } - - fn add(&self, (x, y): (i32, i32)) -> i32 { - x + y - } -} - -fn main() { - println!("Starting"); - let listener = TcpListener::bind("127.0.0.1:9000").unwrap(); - std::thread::spawn(|| { - let server = Server::new(()); - println!("Server running"); - server.serve(listener); - }); - let mut client = Client(TcpStream::connect("127.0.0.1:9000").unwrap()); - println!("Client running"); - println!("{}", client.add((1, 2)).unwrap()); -} diff --git a/src/macros/src/main.rs b/src/macros/src/main.rs new file mode 100644 index 0000000..06efac9 --- /dev/null +++ b/src/macros/src/main.rs @@ -0,0 +1,37 @@ +#[macro_use] +extern crate macros; +extern crate rustc_serialize; +extern crate byteorder; + +use std::net::{TcpListener, TcpStream}; + +rpc!(my_server: + hello(String) -> String; + add((i32, i32)) -> i32; +); + +use my_server::*; + +impl Service for () { + fn hello(&self, s: String) -> String { + format!("Hello, {}", s) + } + + fn add(&self, (x, y): (i32, i32)) -> i32 { + x + y + } +} + +fn main() { + println!("Starting"); + let listener = TcpListener::bind("127.0.0.1:9000").unwrap(); + std::thread::spawn(|| { + let server = Server::new(()); + println!("Server running"); + server.serve(listener); + }); + let mut client = Client(TcpStream::connect("127.0.0.1:9000").unwrap()); + println!("Client running"); + println!("add((1, 2)) => {}", client.add((1, 2)).unwrap()); + println!("hello(\"adam\") => {:?}", client.hello("Adam".into())); +}