diff --git a/src/app/mirror_ui.rs b/src/app/mirror_ui.rs index 724e615..6708af2 100644 --- a/src/app/mirror_ui.rs +++ b/src/app/mirror_ui.rs @@ -762,6 +762,8 @@ impl App { self.mir.base = Value::Null; self.mir.local = Some(local); self.mir.on = true; + // The bots' computer is the brain's now; this one's box isn't kept awake. + crate::cloudbox::set_brain(false); self.mir.online = false; self.mir.version.store(0, Ordering::SeqCst); self.mir.pending.lock().unwrap().clear(); @@ -777,6 +779,7 @@ impl App { fn mirror_leave(&mut self) { self.mir.gen.fetch_add(1, Ordering::SeqCst); self.mir.on = false; + crate::cloudbox::set_brain(true); self.mir.online = false; self.mir.outbox = None; self.streams.clear(); diff --git a/src/cloudbox.rs b/src/cloudbox.rs index 25d94f6..10540a9 100644 --- a/src/cloudbox.rs +++ b/src/cloudbox.rs @@ -697,12 +697,14 @@ pub fn start_background() { set_run(probe()); resume_interrupted(); loop { + // (First wait a little: a computer showing another brain says so right after start.) + std::thread::sleep(Duration::from_secs(20)); let (idle, rebuilding) = { let s = shared().lock().unwrap(); (s.last_used.elapsed().as_secs(), s.rebuilding) }; if !rebuilding { - if matches!(probe(), Run::Asleep) { + if IS_BRAIN.load(Ordering::SeqCst) && matches!(probe(), Run::Asleep) { log("Bot 的電腦不休眠:叫醒它。"); let _ = ensure_running(); } @@ -714,11 +716,17 @@ pub fn start_background() { refresh(); maybe_scheduled_update(); } - std::thread::sleep(Duration::from_secs(20)); } }); } +/// This AnyBot is the brain (its box is the bots' computer). A computer showing another brain +/// doesn't use its own box, so it isn't kept awake there. +static IS_BRAIN: AtomicBool = AtomicBool::new(true); +pub fn set_brain(on: bool) { + IS_BRAIN.store(on, Ordering::SeqCst); +} + static VIEWER_OPEN: AtomicBool = AtomicBool::new(false); pub fn set_viewer_open(on: bool) { VIEWER_OPEN.store(on, Ordering::SeqCst);