forked from rojo-rbx/rojo
Refactor web code to make routing more clear
This commit is contained in:
@@ -96,12 +96,47 @@ impl Server {
|
||||
|
||||
router!(request,
|
||||
(GET) (/) => {
|
||||
Response::text("Rojo is up and running!")
|
||||
self.handle_home()
|
||||
},
|
||||
|
||||
(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 tree = rbx_session.get_tree();
|
||||
|
||||
@@ -112,12 +147,11 @@ impl Server {
|
||||
expected_place_ids: self.live_session.project.serve_place_ids.clone(),
|
||||
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);
|
||||
|
||||
// Did the client miss any messages since the last subscribe?
|
||||
@@ -153,16 +187,11 @@ impl Server {
|
||||
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 requested_ids: Option<Vec<RbxId>> = id_list
|
||||
.split(',')
|
||||
.map(RbxId::parse_str)
|
||||
.collect();
|
||||
|
||||
let requested_ids = match requested_ids {
|
||||
Some(id) => id,
|
||||
None => return rouille::Response::text("Malformed ID list").with_status_code(400),
|
||||
@@ -202,37 +231,22 @@ impl Server {
|
||||
message_cursor,
|
||||
instances,
|
||||
})
|
||||
},
|
||||
|
||||
(GET) (/visualize/rbx) => {
|
||||
let rbx_session = self.live_session.rbx_session.lock().unwrap();
|
||||
|
||||
let dot_source = format!("{}", VisualizeRbxSession(&rbx_session));
|
||||
|
||||
Response::svg(graphviz_to_svg(&dot_source))
|
||||
},
|
||||
|
||||
(GET) (/visualize/imfs) => {
|
||||
let imfs = self.live_session.imfs.lock().unwrap();
|
||||
|
||||
let dot_source = format!("{}", VisualizeImfs(&imfs));
|
||||
|
||||
Response::svg(graphviz_to_svg(&dot_source))
|
||||
},
|
||||
|
||||
(GET) (/visualize/path_metadata) => {
|
||||
let rbx_session = self.live_session.rbx_session.lock().unwrap();
|
||||
|
||||
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);
|
||||
fn handle_visualize_rbx(&self) -> Response {
|
||||
let rbx_session = self.live_session.rbx_session.lock().unwrap();
|
||||
let dot_source = format!("{}", VisualizeRbxSession(&rbx_session));
|
||||
Response::svg(graphviz_to_svg(&dot_source))
|
||||
}
|
||||
|
||||
rouille::start_server(address, move |request| self.handle_request(request));
|
||||
fn handle_visualize_imfs(&self) -> Response {
|
||||
let imfs = self.live_session.imfs.lock().unwrap();
|
||||
let dot_source = format!("{}", VisualizeImfs(&imfs));
|
||||
Response::svg(graphviz_to_svg(&dot_source))
|
||||
}
|
||||
|
||||
fn handle_visualize_path_metadata(&self) -> Response {
|
||||
let rbx_session = self.live_session.rbx_session.lock().unwrap();
|
||||
Response::json(&rbx_session.debug_get_metadata_per_path())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user