syndicate-rkt/syndicate/go.rkt

48 lines
1.6 KiB
Racket
Raw Normal View History

2021-05-27 09:28:10 +00:00
#lang racket/base
(require racket/match)
2021-06-02 13:00:25 +00:00
(require "main.rkt")
(require "dataspace.rkt")
(require "schemas/gen/box-protocol.rkt")
(require (only-in "pattern.rkt" :pattern))
2021-06-01 08:04:10 +00:00
(define box
(action (ds LIMIT REPORT_EVERY)
(spawn (define root-facet this-facet)
(define-field value 0)
(define start-time (current-inexact-milliseconds))
(define prev-value 0)
(at ds
(assert (BoxState (value)))
(when (message (SetBox $new-value))
2021-06-01 08:04:10 +00:00
(when (zero? (remainder new-value REPORT_EVERY))
(define end-time (current-inexact-milliseconds))
(define delta (/ (- end-time start-time) 1000.0))
(define count (- new-value prev-value))
(set! prev-value new-value)
(set! start-time end-time)
(log-info "Box got ~a (~a Hz)" new-value (/ count delta)))
(when (= new-value LIMIT)
(stop-facet root-facet))
(value new-value))))))
(define client
(action (ds)
(spawn (define root-facet this-facet)
(at ds
2021-06-03 14:07:25 +00:00
(when (asserted (BoxState $value)) (send! ds (SetBox (+ value 1))))
(during (BoxState _)
(on-stop (log-info "Client detected box termination")
(stop-facet root-facet)))))))
2021-05-31 11:07:37 +00:00
(module+ main
(time
(actor-system
2021-06-01 08:04:10 +00:00
(define disarm (facet-prevent-inert-check! this-facet))
(define ds (ref (dataspace)))
(box this-turn ds 500000 100000)
(client this-turn ds))))