Use Runtime::enter in Emulator
This commit is contained in:
parent
2d83da799a
commit
a88e67105e
1 changed files with 21 additions and 13 deletions
|
|
@ -82,11 +82,13 @@ impl<P: Program + 'static> Emulator<P> {
|
||||||
|
|
||||||
let runtime = Runtime::new(executor, sender);
|
let runtime = Runtime::new(executor, sender);
|
||||||
|
|
||||||
let (state, task) = if let Some(preset) = preset {
|
let (state, task) = runtime.enter(|| {
|
||||||
preset.boot()
|
if let Some(preset) = preset {
|
||||||
} else {
|
preset.boot()
|
||||||
program.boot()
|
} else {
|
||||||
};
|
program.boot()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
let mut emulator = Self {
|
let mut emulator = Self {
|
||||||
state,
|
state,
|
||||||
|
|
@ -108,7 +110,9 @@ impl<P: Program + 'static> Emulator<P> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn update(&mut self, program: &P, message: P::Message) {
|
pub fn update(&mut self, program: &P, message: P::Message) {
|
||||||
let task = program.update(&mut self.state, message);
|
let task = self
|
||||||
|
.runtime
|
||||||
|
.enter(|| program.update(&mut self.state, message));
|
||||||
|
|
||||||
self.resubscribe(program);
|
self.resubscribe(program);
|
||||||
|
|
||||||
|
|
@ -285,10 +289,11 @@ impl<P: Program + 'static> Emulator<P> {
|
||||||
|
|
||||||
self.cache = Some(user_interface.into_cache());
|
self.cache = Some(user_interface.into_cache());
|
||||||
|
|
||||||
let task =
|
let task = self.runtime.enter(|| {
|
||||||
Task::batch(messages.into_iter().map(|message| {
|
Task::batch(messages.into_iter().map(|message| {
|
||||||
program.update(&mut self.state, message)
|
program.update(&mut self.state, message)
|
||||||
}));
|
}))
|
||||||
|
});
|
||||||
|
|
||||||
self.resubscribe(program);
|
self.resubscribe(program);
|
||||||
self.wait_for(task);
|
self.wait_for(task);
|
||||||
|
|
@ -357,11 +362,14 @@ impl<P: Program + 'static> Emulator<P> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn resubscribe(&mut self, program: &P) {
|
pub fn resubscribe(&mut self, program: &P) {
|
||||||
self.runtime.track(subscription::into_recipes(
|
self.runtime
|
||||||
program.subscription(&self.state).map(|message| {
|
.track(subscription::into_recipes(self.runtime.enter(|| {
|
||||||
Event::Action(Action::Runtime(runtime::Action::Output(message)))
|
program.subscription(&self.state).map(|message| {
|
||||||
}),
|
Event::Action(Action::Runtime(runtime::Action::Output(
|
||||||
));
|
message,
|
||||||
|
)))
|
||||||
|
})
|
||||||
|
})));
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn view(
|
pub fn view(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue