forked from rojo-rbx/rojo
Move web server onto main thread
This commit is contained in:
@@ -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!");
|
||||||
|
|||||||
138
src/web.rs
138
src/web.rs
@@ -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()
|
||||||
|
)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user