Move web server onto main thread

This commit is contained in:
Lucien Greathouse
2017-12-18 01:20:04 -08:00
parent 6472a2cbce
commit f90c51e923
2 changed files with 69 additions and 75 deletions

View File

@@ -196,13 +196,9 @@ fn main() {
}); });
} }
web::start(config.clone(), project.clone(), vfs.clone());
println!("Server listening on port {}", port); println!("Server listening on port {}", port);
loop { web::start(config.clone(), project.clone(), vfs.clone());
thread::park();
}
}, },
("pack", _) => { ("pack", _) => {
eprintln!("'rojo pack' is not yet implemented!"); eprintln!("'rojo pack' is not yet implemented!");

View File

@@ -109,85 +109,83 @@ pub fn start(config: Config, project: Project, vfs: Arc<Mutex<Vfs>>) {
]))); ])));
} }
thread::spawn(move || { rouille::start_server(address, move |request| {
rouille::start_server(address, move |request| { router!(request,
router!(request, (GET) (/) => {
(GET) (/) => { let current_time = {
let current_time = {
let vfs = vfs.lock().unwrap();
vfs.current_time()
};
json(ServerInfo {
server_version: env!("CARGO_PKG_VERSION"),
protocol_version: 1,
server_id: &server_id,
project: &project,
current_time,
})
},
(GET) (/changes/{ last_time: f64 }) => {
let vfs = vfs.lock().unwrap(); let vfs = vfs.lock().unwrap();
vfs.current_time()
};
json(ServerInfo {
server_version: env!("CARGO_PKG_VERSION"),
protocol_version: 1,
server_id: &server_id,
project: &project,
current_time,
})
},
(GET) (/changes/{ last_time: f64 }) => {
let vfs = vfs.lock().unwrap();
let current_time = vfs.current_time();
let changes = vfs.changes_since(last_time);
json(ChangesResult {
changes,
server_id: &server_id,
current_time,
})
},
(POST) (/read) => {
let plugin_chain = PLUGIN_CHAIN.lock().unwrap();
let read_request: Vec<Vec<String>> = match read_json(&request) {
Some(v) => v,
None => return rouille::Response::empty_400(),
};
let (items, current_time) = {
let vfs = vfs.lock().unwrap();
let current_time = vfs.current_time(); let current_time = vfs.current_time();
let changes = vfs.changes_since(last_time);
json(ChangesResult { let mut items = Vec::new();
changes,
server_id: &server_id,
current_time,
})
},
(POST) (/read) => { for route in &read_request {
let plugin_chain = PLUGIN_CHAIN.lock().unwrap(); match vfs.read(&route) {
Ok(v) => items.push(Some(v)),
let read_request: Vec<Vec<String>> = match read_json(&request) { Err(_) => items.push(None),
Some(v) => v,
None => return rouille::Response::empty_400(),
};
let (items, current_time) = {
let vfs = vfs.lock().unwrap();
let current_time = vfs.current_time();
let mut items = Vec::new();
for route in &read_request {
match vfs.read(&route) {
Ok(v) => items.push(Some(v)),
Err(_) => items.push(None),
}
} }
}
(items, current_time) (items, current_time)
}; };
let rbx_items = items let rbx_items = items
.iter() .iter()
.map(|item| { .map(|item| {
match *item { match *item {
Some(ref item) => plugin_chain.transform_file(item), Some(ref item) => plugin_chain.transform_file(item),
None => None, None => None,
} }
})
.collect::<Vec<_>>();
json(ReadResult {
server_id: &server_id,
items: rbx_items,
current_time,
}) })
}, .collect::<Vec<_>>();
(POST) (/write) => { json(ReadResult {
rouille::Response::empty_404() server_id: &server_id,
}, items: rbx_items,
current_time,
})
},
_ => rouille::Response::empty_404() (POST) (/write) => {
) rouille::Response::empty_404()
}); },
_ => rouille::Response::empty_404()
)
}); });
} }