29 lines
833 B
Racket
29 lines
833 B
Racket
#lang racket/base
|
|
;; Ground-event relay for os2.
|
|
|
|
(provide event-relay)
|
|
(require "os2.rkt")
|
|
|
|
(define event-relay
|
|
(transition 'no-state
|
|
(role 'relay-down (topic-publisher (cons (wild) (wild)) #:monitor? #t)
|
|
#:state state
|
|
#:topic t
|
|
#:on-presence (match t
|
|
[(topic 'subscriber (cons (? evt? e) _) #f)
|
|
(printf "SUBSCRIBED ~v~n" e) (flush-output)
|
|
(transition state
|
|
(at-meta-level
|
|
(role t (topic-subscriber (cons e (wild)))
|
|
#:state state
|
|
[msg
|
|
(printf "FIRED ~v -> ~v~n" e msg) (flush-output)
|
|
(transition state
|
|
(send-message msg))])))]
|
|
[_ state])
|
|
#:on-absence (match t
|
|
[(topic 'subscriber (cons (? evt? e) _) #f)
|
|
(printf "UNSUBSCRIBED ~v~n" e) (flush-output)
|
|
(transition state
|
|
(at-meta-level (delete-role t)))]))))
|