diff --git a/minimart/examples/example-lang.rkt b/minimart/examples/example-lang.rkt index e2a45aa..ec77f43 100644 --- a/minimart/examples/example-lang.rkt +++ b/minimart/examples/example-lang.rkt @@ -1,10 +1,11 @@ #lang minimart (require (only-in racket/port read-line-evt)) +(require "../drivers/timer.rkt") (define (r e s) (match e - [(message body _ _) (transition s (send `(got ,body) #:meta-level 1))] + [(message body _ _) (transition s (send `(print got ,body) #:meta-level 1))] [_ #f])) (define (b e n) @@ -17,19 +18,41 @@ (spawn-world (spawn r (void) (sub ?)) (spawn b 0)) -(define (spy e s) - (when e (log-info "SPY: ~v" e)) - #f) - -(spawn spy (void) (gestalt-union (sub ? #:level 0) - (sub ? #:level 1) - (pub ? #:level 1))) - (define (echoer e s) (match e [(message (event _ (list (? eof-object?))) _ _) (transition s (quit))] - [(message (event _ (list line)) _ _) (transition s (send `(got-line ,line)))] + [(message (event _ (list line)) _ _) (transition s (send `(print got-line ,line)))] [_ #f])) (spawn echoer (void) (sub (event (read-line-evt (current-input-port) 'any) ?) #:meta-level 1)) + +(define (ticker e s) + (match e + [(routing-update g) + (printf "EMPTY? ~v\n" (gestalt-empty? g)) + (printf "REF:") + (pretty-print-matcher (gestalt-ref g 0 0 #f) #:indent 4) + (printf "INTERSECTED:\n") + (pretty-print-gestalt (gestalt-intersect g (sub (set-timer ? ? ?)))) + #f] + [(message (timer-expired 'tick now) _ _) + (printf "TICK ~v\n" now) + (transition (+ s 1) (if (< s 3) + (send (set-timer 'tick 1000 'relative)) + (quit)))] + [_ #f])) + +(spawn-timer-driver) +(send (set-timer 'tick 1000 'relative)) +(spawn ticker 1 (gestalt-union (pub (set-timer ? ? ?) #:level 1) + (sub (timer-expired 'tick ?)))) + +(define (printer e s) + (match e + [(message (cons 'print v) _ _) + (log-info "PRINTER: ~a" v) + #f] + [_ #f])) + +(spawn printer (void) (sub `(print . ,?))) diff --git a/minimart/examples/example-plain.rkt b/minimart/examples/example-plain.rkt index 531d6fa..ff76989 100644 --- a/minimart/examples/example-plain.rkt +++ b/minimart/examples/example-plain.rkt @@ -3,10 +3,11 @@ (require racket/match) (require (only-in racket/port read-line-evt)) (require "../main.rkt") +(require "../drivers/timer.rkt") (define (r e s) (match e - [(message body _ _) (transition s (send `(got ,body) #:meta-level 1))] + [(message body _ _) (transition s (send `(print got ,body) #:meta-level 1))] [_ #f])) (define (b e n) @@ -16,20 +17,41 @@ #f)] [_ #f])) -(define (spy e s) - (when e (log-info "SPY: ~v" e)) - #f) - (define (echoer e s) (match e [(message (event _ (list (? eof-object?))) _ _) (transition s (quit))] - [(message (event _ (list line)) _ _) (transition s (send `(got-line ,line)))] + [(message (event _ (list line)) _ _) (transition s (send `(print got-line ,line)))] [_ #f])) -(run-ground (spawn-world (spawn r (void) (sub ?)) +(define (ticker e s) + (match e + [(routing-update g) + (printf "EMPTY? ~v\n" (gestalt-empty? g)) + (printf "REF:") + (pretty-print-matcher (gestalt-ref g 0 0 #f) #:indent 4) + (printf "INTERSECTED:\n") + (pretty-print-gestalt (gestalt-intersect g (sub (set-timer ? ? ?)))) + #f] + [(message (timer-expired 'tick now) _ _) + (printf "TICK ~v\n" now) + (transition (+ s 1) (if (< s 3) + (send (set-timer 'tick 1000 'relative)) + (quit)))] + [_ #f])) + +(define (printer e s) + (match e + [(message (cons 'print v) _ _) + (log-info "PRINTER: ~a" v) + #f] + [_ #f])) + +(run-ground (spawn-timer-driver) + (send (set-timer 'tick 1000 'relative)) + (spawn ticker 1 (gestalt-union (pub (set-timer ? ? ?) #:level 1) + (sub (timer-expired 'tick ?)))) + (spawn-world (spawn r (void) (sub ?)) (spawn b 0)) (spawn echoer (void) (sub (event (read-line-evt (current-input-port) 'any) ?) #:meta-level 1)) - (spawn spy (void) (gestalt-union (sub ? #:level 0) - (sub ? #:level 1) - (pub ? #:level 1)))) + (spawn printer (void) (sub `(print . ,?))))