From 8d3d42aeb5bfb4abc471eb26172496e3ac0e1514 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 20 Jun 2019 07:53:13 -0400 Subject: node: Add reboot feature. --- starling/node.scm | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/starling/node.scm b/starling/node.scm index f8a0e79..07fef48 100644 --- a/starling/node.scm +++ b/starling/node.scm @@ -37,6 +37,7 @@ on-boot on-enter on-exit + reboot activate deactivate show @@ -143,6 +144,23 @@ represented as a ratio in the range [0, 1]." (set! (booted? node) #t) (on-boot node)) +(define-method (reboot (node )) + (define (do-reboot) + (for-each detach (children node)) + (with-agenda (agenda node) (reset-agenda)) + (on-boot node)) + (cond + ;; Never booted before, so do nothing. + ((not (booted? node)) + #t) + ;; Currently active, so reactivate after reboot. + ((active? node) + (do-reboot) + (activate node)) + ;; Not active. + (else + (do-reboot)))) + (define-method (activate (node )) "Mark NODE and all of its children as active." ;; First time activating? We must boot! -- cgit v1.2.3