restart listener

This commit is contained in:
anatoly 2016-11-01 21:23:09 -04:00
parent fea36ec2a5
commit 9b063504e8

View file

@ -301,6 +301,25 @@
(var-to-str to) :state))
states))
;; restart on events
(defprotocol ChangeListener
(add-watcher [this ks watcher])
(on-change [this k]))
(deftype RestartListener [watchers]
ChangeListener
(add-watcher [_ ks state]
(doseq [k ks]
(swap! watchers update k #(conj % state))))
(on-change [_ k]
(let [states (@watchers k)]
(apply stop states)
(apply start states))))
;; explicit, not composable (subject to depreciate?)
(defn stop-except [& states]