2016-09-20 01:14:08 +00:00
|
|
|
#lang syndicate/actor
|
|
|
|
|
|
|
|
(require syndicate/firewall)
|
|
|
|
|
|
|
|
(struct m (b) #:prefab)
|
|
|
|
(struct a (v) #:prefab)
|
|
|
|
|
2017-02-15 23:18:19 +00:00
|
|
|
(spawn (on (message (m $b))
|
2016-09-20 01:14:08 +00:00
|
|
|
(printf "Message: ~v\n" b))
|
|
|
|
(on (asserted (a $v))
|
|
|
|
(printf "Asserted: ~v\n" v))
|
|
|
|
(on (retracted (a $v))
|
|
|
|
(printf "Retracted: ~v\n" v)))
|
|
|
|
|
|
|
|
(firewall [(allow (m 'ok1))
|
|
|
|
(allow (m 'ok2))]
|
|
|
|
(on-start (send! (m 'ok1))
|
|
|
|
(send! (m 'ok2))
|
|
|
|
(send! (m 'must-not-allow))))
|
|
|
|
|
|
|
|
(firewall [(allow (m ?))
|
|
|
|
(forbid (m 'must-not-allow))]
|
|
|
|
(on-start (send! (m 'ok1))
|
|
|
|
(send! (m 'ok2))
|
|
|
|
(send! (m 'must-not-allow))))
|
|
|
|
|
|
|
|
(firewall [(allow (a 'ok1))
|
|
|
|
(allow (a (list ?)))
|
|
|
|
(forbid (a (list 'forbidden)))
|
|
|
|
(allow (a 'ok2))]
|
|
|
|
(assert (a 'ok1))
|
|
|
|
(assert (a 'ok2))
|
|
|
|
(assert (a (list 'ok3)))
|
|
|
|
(assert (a (list 'forbidden))))
|
|
|
|
|
|
|
|
(firewall [(allow (a 'ok-wild1))
|
|
|
|
(allow (a 'ok-wild2))]
|
|
|
|
(assert (a _)))
|
|
|
|
|
|
|
|
(firewall [(allow (a 'ok-kid))]
|
|
|
|
(assert (a 'forbidden-parent))
|
2017-02-15 23:18:19 +00:00
|
|
|
(on-start (spawn (assert (a _)))))
|
2016-09-20 01:19:17 +00:00
|
|
|
|
|
|
|
(firewall [(allow (a 'ok-kid2))
|
|
|
|
(allow (a 'ok-parent2))]
|
|
|
|
(assert (a 'ok-parent2))
|
|
|
|
(assert (a 'forbidden-parent2))
|
|
|
|
(on-start (firewall [(allow ?)
|
|
|
|
(forbid (a 'ok-parent2))]
|
|
|
|
(assert (a _)))))
|
2016-09-20 01:21:43 +00:00
|
|
|
|
|
|
|
(firewall [(allow (observe (m 'ok1)))
|
|
|
|
(allow (observe (a 'ok1)))]
|
|
|
|
(on (asserted $x)
|
|
|
|
(printf "Observed assertion ~v\n" x))
|
|
|
|
(on (retracted $x)
|
|
|
|
(printf "Observed retraction ~v\n" x))
|
|
|
|
(on (message $x)
|
|
|
|
(printf "Observed message ~v\n" x)))
|