Only the brain keeps its box awake: a computer showing another brain leaves its own box alone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
ab564f706f
commit
c3e2e28ec4
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue