2015-05-11 22:25:38 +00:00
|
|
|
#lang prospect
|
|
|
|
|
|
|
|
(require "../endpoint.rkt")
|
|
|
|
(require "../drivers/timer.rkt")
|
|
|
|
|
|
|
|
(spawn-timer-driver)
|
|
|
|
|
2015-11-25 16:27:58 +00:00
|
|
|
(define ((log-it eid) e u)
|
|
|
|
(log-info "endpoint ~a state ~a: ~v" eid u e)
|
2015-05-11 22:25:38 +00:00
|
|
|
(and e (transition (+ u 1)
|
|
|
|
(if (equal? e (message 2))
|
|
|
|
(if (equal? eid 0)
|
2015-12-01 22:22:08 +00:00
|
|
|
(list (unsub 2) (sub 5) (as-endpoint 1 (delete-endpoint)))
|
2015-05-11 22:25:38 +00:00
|
|
|
(list (unsub 2) (sub 5)))
|
|
|
|
'()))))
|
|
|
|
|
|
|
|
(spawn (lambda (e u)
|
|
|
|
(when (message? e) (log-info "general: ~v" e))
|
|
|
|
#f)
|
|
|
|
(void)
|
2015-12-03 20:53:07 +00:00
|
|
|
(patch-seq (sub ?)
|
|
|
|
(unsub (observe ?))
|
|
|
|
(unsub (at-meta ?))))
|
2015-05-11 22:25:38 +00:00
|
|
|
|
|
|
|
(spawn-endpoint-group 0
|
|
|
|
(add-endpoint
|
|
|
|
(lambda (eid state)
|
2015-11-25 16:27:58 +00:00
|
|
|
(values (log-it eid)
|
2015-05-11 22:25:38 +00:00
|
|
|
(transition state
|
|
|
|
(list (sub 1)
|
|
|
|
(sub 2))))))
|
|
|
|
(add-endpoint
|
|
|
|
(lambda (eid state)
|
2015-11-25 16:27:58 +00:00
|
|
|
(values (log-it eid)
|
2015-05-11 22:25:38 +00:00
|
|
|
(transition state
|
|
|
|
(list (sub 3)
|
|
|
|
(sub 2)))))))
|
|
|
|
|
|
|
|
(define (after msec thunk)
|
|
|
|
(define id (gensym 'after))
|
|
|
|
(if (zero? msec)
|
|
|
|
(thunk)
|
|
|
|
(list
|
|
|
|
(spawn (lambda (e s) (and (message? e) (quit (thunk))))
|
|
|
|
(void)
|
|
|
|
(sub (timer-expired id ?)))
|
|
|
|
(message (set-timer id msec 'relative)))))
|
|
|
|
|
|
|
|
(after 100
|
|
|
|
(lambda ()
|
|
|
|
(list
|
|
|
|
(message 0)
|
|
|
|
(message 1)
|
|
|
|
(message 2)
|
|
|
|
(message 3)
|
|
|
|
(message 4)
|
|
|
|
(message 5)
|
|
|
|
(message 6))))
|
|
|
|
|
|
|
|
(after 100
|
|
|
|
(lambda ()
|
|
|
|
(list
|
|
|
|
(message 0)
|
|
|
|
(message 1)
|
|
|
|
(message 2)
|
|
|
|
(message 3)
|
|
|
|
(message 4)
|
|
|
|
(message 5)
|
|
|
|
(message 6))))
|