#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)))]))))