The UI is _finally_ responsive while the builder runs.
This commit is contained in:
parent
5ae24d9b0a
commit
7c9bea81b2
4 changed files with 35 additions and 35 deletions
42
builder.cpp
42
builder.cpp
|
@ -120,27 +120,45 @@ void Builder::waiting(BuildEvent ev) {
|
|||
game.start_round();
|
||||
gui.building();
|
||||
gui.output(format("CHANGES! Running build {}", build_cmd));
|
||||
build_fut = std::async([&]() {
|
||||
return start_command(build_cmd);
|
||||
});
|
||||
state(STARTING);
|
||||
state(FORKING);
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::starting(BuildEvent ev) {
|
||||
std::future_status status = build_fut.wait_for(0ms);
|
||||
void Builder::forking(BuildEvent ev) {
|
||||
if(build_fut.valid()) {
|
||||
std::future_status status = build_fut.wait_for(0ms);
|
||||
|
||||
if(status == std::future_status::ready) {
|
||||
build_out = build_fut.get();
|
||||
state(READING);
|
||||
if(status == std::future_status::ready) {
|
||||
build_out = build_fut.get();
|
||||
state(READING);
|
||||
} else {
|
||||
state(FORKING);
|
||||
}
|
||||
} else {
|
||||
state(STARTING);
|
||||
build_fut = std::async([&]() {
|
||||
return start_command(build_cmd);
|
||||
});
|
||||
|
||||
state(FORKING);
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::reading(BuildEvent ev) {
|
||||
line = read_line(build_out, build_done);
|
||||
state(BUILDING);
|
||||
// BUG: too much copy-pasta so turn this into a class?
|
||||
if(read_fut.valid()) {
|
||||
std::future_status status = read_fut.wait_for(0ms);
|
||||
|
||||
if(status == std::future_status::ready) {
|
||||
line = read_fut.get();
|
||||
state(BUILDING);
|
||||
} else {
|
||||
state(READING);
|
||||
}
|
||||
} else {
|
||||
read_fut = std::async([&]() {
|
||||
return read_line(build_out, build_done);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
void Builder::done(BuildEvent ev) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue