syndicate-2017/racket/syndicate/examples/actor/broadcast-messages.rkt

23 lines
716 B
Racket
Raw Normal View History

#lang syndicate
2016-06-27 18:42:42 +00:00
;; Demonstrate sending a message to multiple receivers.
(struct envelope (destination message) #:prefab)
(spawn (on (message (envelope 'alice $message))
(log-info "Alice received ~v" message)))
2016-06-27 18:42:42 +00:00
(spawn (on (message (envelope 'bob $message))
(log-info "Bob received ~v" message)))
2016-06-27 18:42:42 +00:00
(spawn*
2016-06-27 18:42:42 +00:00
(log-info "Waiting for Alice and Bob.")
(until (asserted (observe (envelope 'alice _))))
(until (asserted (observe (envelope 'bob _))))
(log-info "Sending a few messages...")
(send! (envelope 'alice "For Alice's eyes only"))
(send! (envelope 'bob "Dear Bob, how are you? Kind regards, etc."))
(send! (envelope ? "Important announcement!"))
(log-info "Sent all the messages."))