2014-08-06 19:16:50 +00:00
|
|
|
#lang racket/base
|
2013-04-11 23:07:29 +00:00
|
|
|
;; Ground-event relay.
|
|
|
|
|
|
|
|
(provide event-relay)
|
2014-08-06 19:16:50 +00:00
|
|
|
(require "../sugar.rkt")
|
2013-04-11 23:07:29 +00:00
|
|
|
|
2014-08-06 19:16:50 +00:00
|
|
|
;; event-relay : (All (ParentState) Symbol -> (Spawn ParentState))
|
2013-04-11 23:07:29 +00:00
|
|
|
(define (event-relay self-id)
|
2013-06-03 18:57:42 +00:00
|
|
|
(name-process `(event-relay ,self-id)
|
2014-08-06 19:16:50 +00:00
|
|
|
(spawn (transition/no-state
|
|
|
|
(observe-subscribers (cons ? ?)
|
|
|
|
(match-conversation (cons (? evt? e) _)
|
|
|
|
(on-presence (begin
|
|
|
|
(printf "SUBSCRIBED ~v~n" e)
|
2013-06-03 18:57:42 +00:00
|
|
|
(flush-output)
|
2014-08-06 19:16:50 +00:00
|
|
|
(at-meta-level
|
|
|
|
(name-endpoint `(event-relay ,self-id ,e)
|
|
|
|
(subscriber (cons e ?)
|
|
|
|
(on-message
|
|
|
|
[msg (begin (printf "FIRED ~v -> ~v~n" e msg)
|
|
|
|
(flush-output)
|
|
|
|
(send-message msg))]))))))
|
|
|
|
(on-absence (begin
|
|
|
|
(printf "UNSUBSCRIBED ~v~n" e)
|
|
|
|
(flush-output)
|
|
|
|
(at-meta-level
|
|
|
|
(delete-endpoint `(event-relay ,self-id ,e)))))))))))
|