mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-24 14:45:56 +00:00
Refactor web code to make routing more clear
This commit is contained in:
@@ -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));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user