liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 8f97c5bf3c0afd9593db7e3a4c09e5f00863d9a2
parent 7904c6bfe92420fe2776dc709a45c26762c96357
Author: Daniel Barlow <dan@telent.net>
Date:   Tue, 12 Sep 2023 20:42:42 +0100

anoia service :events method behaves as iterator

Diffstat:
Mexamples/acquire-wan-address.fnl | 12++++++------
Mpkgs/anoia/svc.fnl | 7+++++++
2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/examples/acquire-wan-address.fnl b/examples/acquire-wan-address.fnl @@ -31,14 +31,14 @@ new-addresses)) (fn run [] + (var addresses []) (let [[state-directory wan-device] arg dir (svc.open state-directory)] - (var addresses []) - (while true - (while (not (dir:ready?)) (dir:wait)) - (when (. bound-states (dir:output "state")) + (each [v (dir:events)] + ;; we don't handle unbound or stopped, where we should + ;; take the addresses away + (when (. bound-states (v:output "state")) (set addresses - (update-addresses wan-device addresses (dir:output "address")))) - (dir:wait)))) + (update-addresses wan-device addresses (v:output "address"))))))) { : update-addresses : changes : run } diff --git a/pkgs/anoia/svc.fnl b/pkgs/anoia/svc.fnl @@ -33,6 +33,12 @@ unknown (error (.. "can't read " pathname " of kind \"" unknown.mode "\"")))) +(fn events [self] + (coroutine.wrap + #(while true + (while (not (self:ready?)) (self:wait)) + (coroutine.yield self) + (self:wait)))) (fn open [directory] (let [watcher (watch-fsevents directory) @@ -44,6 +50,7 @@ :output (fn [_ filename] (read-value (.. directory "/" filename))) :close #(watcher:close) + : events })) { : open }