Restructure launch of servers
This change enables the possibility of launching multiple Iron server
instances, which is required for implementing the redirect HTTP server.
Diff
src/main.rs | 36 +++++++++++++++++++++++++++---------
1 file changed, 27 insertions(+), 9 deletions(-)
@@ -7,7 +7,7 @@ extern crate log;
use crate::config::Options;
use hyper_native_tls::NativeTlsServer;
use iron::prelude::*;
use iron::{prelude::*, Listening};
use staticfiles::*;
use structopt::StructOpt;
@@ -19,12 +19,21 @@ mod logger;
mod signal_manager;
mod staticfiles;
fn on_server_running(server_name: &str, proto: &str, addr: &str) {
#[derive(Debug)]
struct RunningServer {
listening: Listening,
server_type: String,
}
fn on_server_running(server_name: &str, running_servers: &Vec<RunningServer>) {
logger::log_server(&format!(
"Static {} Server \"{}\" is listening on {}",
proto, server_name, addr
));
running_servers.iter().for_each(|server| {
logger::log_server(&format!(
"{} Server \"{}\" is listening on {}",
server.server_type, server_name, server.listening.socket
))
});
signal_manager::wait_for_signal(|sig: signal::Signal| {
@@ -42,7 +51,6 @@ fn main() {
logger::init(&opts.log_level);
let addr = &format!("{}{}{}", opts.host, ":", opts.port);
let proto = if opts.tls { "HTTPS" } else { "HTTP" };
@@ -54,19 +62,29 @@ fn main() {
cors_allow_origins: opts.cors_allow_origins,
});
let mut running_servers = Vec::new();
if opts.tls {
let ssl = NativeTlsServer::new(opts.tls_pkcs12, &opts.tls_pkcs12_passwd).unwrap();
match Iron::new(files.handle()).https(addr, ssl) {
Result::Ok(_) => on_server_running(&opts.name, &proto, addr),
Result::Ok(listening) => running_servers.push(RunningServer {
listening,
server_type: "Static HTTPS".to_string(),
}),
Result::Err(err) => panic!("{:?}", err),
}
} else {
match Iron::new(files.handle()).http(addr) {
Result::Ok(_) => on_server_running(&opts.name, &proto, addr),
Result::Ok(listening) => running_servers.push(RunningServer {
listening,
server_type: "Static HTTP".to_string(),
}),
Result::Err(err) => panic!("{:?}", err),
}
}
on_server_running(&opts.name, &running_servers);
}
#[cfg(test)]