syndicate-2017/racket/syndicate/examples/actor/example-supervise.rkt

33 lines
933 B
Racket

#lang syndicate
;; Shows the difference between a supervised exit and a supervised crash.
(require/activate syndicate/supervise)
(require/activate syndicate/drivers/timestate)
(supervise
#:name 'ward-supervisor
(spawn #:name 'ward
(on-start (log-info "Starting ward"))
(on-stop (log-info "Stopping ward"))
(on (message 'crash)
(log-info "Crashing")
(error 'ward "Eep!"))
(stop-when (message 'quit)
(log-info "Bye!"))))
(define (monitor-interest-in thing)
(spawn #:name (list 'monitor-interest-in thing)
(during (observe thing)
(on-start (log-info "Interest in ~v appeared" thing))
(on-stop (log-info "Interest in ~v disappeared" thing)))))
(monitor-interest-in 'crash)
(monitor-interest-in 'quit)
(spawn* #:name 'main
(sleep 1)
(send! 'crash)
(sleep 1)
(send! 'quit)
(sleep 1))