Skip to content

Commit

Permalink
Merge pull request #27 from hfiguiere/option-port2
Browse files Browse the repository at this point in the history
Add command line options to set listening ports
  • Loading branch information
fabricedesre committed Feb 6, 2016
2 parents d820772 + 83f6217 commit cea37bf
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 18 deletions.
16 changes: 10 additions & 6 deletions src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,20 @@ const DEFAULT_HOSTNAME: &'static str = "::"; // ipv6 default.
pub type SharedContext = Arc<Mutex<Context>>;

impl Context {
pub fn new(verbose: bool, hostname: Option<String>) -> Context {
pub fn new(verbose: bool, hostname: Option<String>,
http_port: Option<u16>, ws_port: Option<u16>) -> Context {

Context { services: HashMap::new(),
verbose: verbose,
hostname: hostname.unwrap_or(DEFAULT_HOSTNAME.to_owned()),
http_port: DEFAULT_HTTP_PORT,
ws_port: DEFAULT_WS_PORT }
http_port: http_port.unwrap_or(DEFAULT_HTTP_PORT),
ws_port: ws_port.unwrap_or(DEFAULT_WS_PORT) }
}

pub fn shared(verbose: bool, hostname: Option<String>) -> SharedContext {
Arc::new(Mutex::new(Context::new(verbose, hostname)))
pub fn shared(verbose: bool, hostname: Option<String>,
http_port: Option<u16>,
ws_port: Option<u16>) -> SharedContext {
Arc::new(Mutex::new(Context::new(verbose, hostname, http_port, ws_port)))
}

pub fn add_service(&mut self, service: Box<Service>) {
Expand Down Expand Up @@ -102,7 +106,7 @@ fn test_should_add_a_service() {
}

let service = ServiceStub;
let mut foo = Context::new(false, Some("localhost".to_owned()));
let mut foo = Context::new(false, Some("localhost".to_owned()), None, None);

assert_eq!(foo.services.is_empty(), true);
foo.add_service(Box::new(service));
Expand Down
52 changes: 40 additions & 12 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,22 @@ use controler::Controler;
use docopt::Docopt;

const USAGE: &'static str = "
Usage: foxbox [-v] [-h] [-n <hostname>]
Usage: foxbox [-v] [-h] [-n <hostname>] [-p <port>] [-w <wsport>]
Options:
-v, --verbose Toggle verbose output.
-n, --name Set local hostname.
-n, --name <hostname> Set local hostname.
-p, --port <port> Set port to listen on for http connections.
-w, --wsport <wsport> Set port to listen on for websocket.
-h, --help Print this help menu.
";

#[derive(RustcDecodable)]
struct Args {
flag_verbose: bool,
arg_hostname: Option<String>,
flag_name: Option<String>,
flag_port: Option<u16>,
flag_wsport: Option<u16>,
flag_help: bool,
}

Expand All @@ -70,7 +74,8 @@ fn main() {
if let Ok(mut event_loop) = mio::EventLoop::new() {
let sender = event_loop.channel();

let context = Context::shared(args.flag_verbose, args.arg_hostname);
let context = Context::shared(args.flag_verbose, args.flag_name,
args.flag_port, args.flag_wsport);
let mut controler = Controler::new(sender, context);
controler.start();

Expand All @@ -83,12 +88,35 @@ fn main() {

#[test]
fn options_are_good() {
// test the consistency of the USAGE and Args.
let args: Args = Docopt::new(USAGE)
.and_then(|d| d.decode())
.unwrap_or_else(|e| e.exit());

assert_eq!(args.flag_verbose, false);
assert_eq!(args.arg_hostname, None);
assert_eq!(args.flag_help, false);
// short form options
{
let argv = || vec!["foxbox", "-p", "1234", "-n", "foobar",
"-w", "4567", "-v"];

let args: Args = Docopt::new(USAGE)
.and_then(|d| d.argv(argv().into_iter()).decode())
.unwrap_or_else(|e| e.exit());

assert_eq!(args.flag_verbose, true);
assert_eq!(args.flag_name, Some("foobar".to_string()));
assert_eq!(args.flag_port, Some(1234));
assert_eq!(args.flag_wsport, Some(4567));
assert_eq!(args.flag_help, false);
}
// long form options
{
let argv = || vec!["foxbox", "--port", "1234",
"--name", "foobar", "--wsport", "4567",
"--verbose"];

let args: Args = Docopt::new(USAGE)
.and_then(|d| d.argv(argv().into_iter()).decode())
.unwrap_or_else(|e| e.exit());

assert_eq!(args.flag_verbose, true);
assert_eq!(args.flag_name, Some("foobar".to_string()));
assert_eq!(args.flag_port, Some(1234));
assert_eq!(args.flag_wsport, Some(4567));
assert_eq!(args.flag_help, false);
}
}

0 comments on commit cea37bf

Please sign in to comment.