33 lines
907 B
Racket
33 lines
907 B
Racket
#lang typed/racket/base
|
|
|
|
(require "../sugar-typed.rkt")
|
|
|
|
(provide generic-spy)
|
|
|
|
(: generic-spy : (All (ParentState) Any -> (Spawn ParentState)))
|
|
(define (generic-spy label)
|
|
(spawn: #:debug-name `(generic-spy ,label)
|
|
#:parent : ParentState
|
|
#:child : Void
|
|
(transition: (void) : Void
|
|
(endpoint: : Void
|
|
#:subscriber (wild) #:observer
|
|
#:peer-orientation orientation
|
|
#:conversation topic
|
|
#:peer-interest-type interest
|
|
#:reason reason
|
|
#:on-presence (begin (write `(,label ENTER (,orientation ,topic ,interest)))
|
|
(newline)
|
|
(flush-output)
|
|
'())
|
|
#:on-absence (begin (write `(,label EXIT (,orientation ,topic ,interest)))
|
|
(newline)
|
|
(display reason)
|
|
(newline)
|
|
(flush-output)
|
|
'())
|
|
[p (begin (write `(,label MSG ,p))
|
|
(newline)
|
|
(flush-output)
|
|
'())]))))
|