Refactor web code to make routing more clear

This commit is contained in:
Lucien Greathouse
2019-01-28 18:23:57 -08:00
parent 6c3e118ee3
commit aeb18eb124

View File

@@ -96,12 +96,47 @@ impl Server {
router!(request, router!(request,
(GET) (/) => { (GET) (/) => {
Response::text("Rojo is up and running!") self.handle_home()
}, },
(GET) (/api/rojo) => { (GET) (/api/rojo) => {
// Get a summary of information about the server. self.handle_api_rojo()
},
(GET) (/api/subscribe/{ cursor: u32 }) => {
self.handle_api_subscribe(cursor)
},
(GET) (/api/read/{ id_list: String }) => {
let requested_ids: Option<Vec<RbxId>> = id_list
.split(',')
.map(RbxId::parse_str)
.collect();
self.handle_api_read(requested_ids)
},
(GET) (/visualize/rbx) => {
self.handle_visualize_rbx()
},
(GET) (/visualize/imfs) => {
self.handle_visualize_imfs()
},
(GET) (/visualize/path_metadata) => {
self.handle_visualize_path_metadata()
},
_ => Response::empty_404()
)
}
pub fn listen(self, port: u16) {
let address = format!("0.0.0.0:{}", port);
rouille::start_server(address, move |request| self.handle_request(request));
}
fn handle_home(&self) -> Response {
Response::text("Rojo is up and running!")
}
/// Get a summary of information about the server
fn handle_api_rojo(&self) -> Response {
let rbx_session = self.live_session.rbx_session.lock().unwrap(); let rbx_session = self.live_session.rbx_session.lock().unwrap();
let tree = rbx_session.get_tree(); let tree = rbx_session.get_tree();
@@ -112,12 +147,11 @@ impl Server {
expected_place_ids: self.live_session.project.serve_place_ids.clone(), expected_place_ids: self.live_session.project.serve_place_ids.clone(),
root_instance_id: tree.get_root_id(), root_instance_id: tree.get_root_id(),
}) })
}, }
(GET) (/api/subscribe/{ cursor: u32 }) => {
// Retrieve any messages past the given cursor index, and if
// there weren't any, subscribe to receive any new messages.
/// Retrieve any messages past the given cursor index, and if
/// there weren't any, subscribe to receive any new messages.
fn handle_api_subscribe(&self, cursor: u32) -> Response {
let message_queue = Arc::clone(&self.live_session.message_queue); let message_queue = Arc::clone(&self.live_session.message_queue);
// Did the client miss any messages since the last subscribe? // Did the client miss any messages since the last subscribe?
@@ -153,16 +187,11 @@ impl Server {
message_cursor: new_cursor, message_cursor: new_cursor,
}) })
} }
}, }
(GET) (/api/read/{ id_list: String }) => { fn handle_api_read(&self, requested_ids: Option<Vec<RbxId>>) -> Response {
let message_queue = Arc::clone(&self.live_session.message_queue); let message_queue = Arc::clone(&self.live_session.message_queue);
let requested_ids: Option<Vec<RbxId>> = id_list
.split(',')
.map(RbxId::parse_str)
.collect();
let requested_ids = match requested_ids { let requested_ids = match requested_ids {
Some(id) => id, Some(id) => id,
None => return rouille::Response::text("Malformed ID list").with_status_code(400), None => return rouille::Response::text("Malformed ID list").with_status_code(400),
@@ -202,37 +231,22 @@ impl Server {
message_cursor, message_cursor,
instances, instances,
}) })
}, }
(GET) (/visualize/rbx) => { fn handle_visualize_rbx(&self) -> Response {
let rbx_session = self.live_session.rbx_session.lock().unwrap(); let rbx_session = self.live_session.rbx_session.lock().unwrap();
let dot_source = format!("{}", VisualizeRbxSession(&rbx_session)); let dot_source = format!("{}", VisualizeRbxSession(&rbx_session));
Response::svg(graphviz_to_svg(&dot_source)) Response::svg(graphviz_to_svg(&dot_source))
}, }
(GET) (/visualize/imfs) => { fn handle_visualize_imfs(&self) -> Response {
let imfs = self.live_session.imfs.lock().unwrap(); let imfs = self.live_session.imfs.lock().unwrap();
let dot_source = format!("{}", VisualizeImfs(&imfs)); let dot_source = format!("{}", VisualizeImfs(&imfs));
Response::svg(graphviz_to_svg(&dot_source)) Response::svg(graphviz_to_svg(&dot_source))
}, }
(GET) (/visualize/path_metadata) => { fn handle_visualize_path_metadata(&self) -> Response {
let rbx_session = self.live_session.rbx_session.lock().unwrap(); let rbx_session = self.live_session.rbx_session.lock().unwrap();
Response::json(&rbx_session.debug_get_metadata_per_path()) Response::json(&rbx_session.debug_get_metadata_per_path())
},
_ => Response::empty_404()
)
}
pub fn listen(self, port: u16) {
let address = format!("0.0.0.0:{}", port);
rouille::start_server(address, move |request| self.handle_request(request));
} }
} }