diff --git a/server/src/commands/serve.rs b/server/src/commands/serve.rs index de918ec8..1b488fd6 100644 --- a/server/src/commands/serve.rs +++ b/server/src/commands/serve.rs @@ -5,10 +5,10 @@ use std::fs; use rand; use project::Project; -use web; +use web::{self, WebConfig}; use session::Session; -pub fn serve(project_path: &PathBuf, port: Option) { +pub fn serve(project_path: &PathBuf, override_port: Option) { let server_id = rand::random::(); let project = match Project::load(project_path) { @@ -22,20 +22,16 @@ pub fn serve(project_path: &PathBuf, port: Option) { }, }; + let port = override_port.unwrap_or(project.serve_port); + println!("Using project {:#?}", project); let mut session = Session::new(project.clone()); session.start(); - let web_config = web::WebConfig { - port: port.unwrap_or(project.serve_port), - server_id, - rbx_session: session.get_rbx_session(), - message_session: session.get_message_session(), - partitions: project.partitions, - }; + let web_config = WebConfig::from_session(server_id, port, &session); - println!("Server listening on port {}", web_config.port); + println!("Server listening on port {}", port); web::start(web_config); } diff --git a/server/src/session.rs b/server/src/session.rs index efa6042b..55341bb3 100644 --- a/server/src/session.rs +++ b/server/src/session.rs @@ -12,7 +12,7 @@ trait Middleware { } pub struct Session { - project: Project, + pub project: Project, vfs_session: Arc>, rbx_session: Arc>, message_session: MessageSession, diff --git a/server/src/web.rs b/server/src/web.rs index 0596e35c..b4c5260e 100644 --- a/server/src/web.rs +++ b/server/src/web.rs @@ -3,20 +3,33 @@ use std::sync::{mpsc, RwLock, Arc}; use rouille::{self, Request, Response}; -use web_util::read_json; use id::Id; +use message_session::{MessageSession, Message}; +use project::Project; use rbx::RbxInstance; use rbx_session::RbxSession; -use message_session::{MessageSession, Message}; -use partition::Partition; +use session::Session; +use web_util::read_json; /// The set of configuration the web server needs to start. pub struct WebConfig { pub port: u64, + pub project: Project, pub server_id: u64, pub rbx_session: Arc>, pub message_session: MessageSession, - pub partitions: HashMap, +} + +impl WebConfig { + pub fn from_session(server_id: u64, port: u64, session: &Session) -> WebConfig { + WebConfig { + port, + server_id, + project: session.project.clone(), + rbx_session: session.get_rbx_session(), + message_session: session.get_message_session(), + } + } } #[derive(Debug, Serialize)] @@ -78,7 +91,7 @@ impl Server { let mut partitions = HashMap::new(); - for partition in self.config.partitions.values() { + for partition in self.config.project.partitions.values() { partitions.insert(partition.name.clone(), partition.target.as_slice()); } diff --git a/server/tests/web.rs b/server/tests/web.rs index a6f8cd29..a2c41894 100644 --- a/server/tests/web.rs +++ b/server/tests/web.rs @@ -1,5 +1,11 @@ +extern crate rouille; + extern crate librojo; +use rouille::{Request, Response}; + +use librojo::web::{Server, WebConfig}; + fn main() { println!("Hello, world!"); } \ No newline at end of file