racket/collects/2htdp/tests/struct-universe.rkt

54 lines
1.5 KiB
Racket

#lang racket
(module shared racket/base
(require 2htdp/universe 2htdp/image)
(struct s (t) #:prefab)
(provide s s-t (all-from-out 2htdp/universe 2htdp/image)))
(module client racket
(require (submod ".." shared))
;; Color -> Boolean
(define (client c)
(define count 0)
(big-bang #true
(to-draw (lambda (w) (text (if w "hello world" "good bye") 22 c)))
(register LOCALHOST)
#;
(stop-when (lambda (w) (> count 3)))
(on-receive
(lambda (w msg)
(set! count (+ count 1))
;; send out a prefabed struct to the server
(make-package (not w) (s count))))))
(provide client))
(module server racket
(require (submod ".." shared))
(define (server)
(universe '()
(on-new (lambda (w n) (make-bundle (cons n w) '() '())))
(on-tick
(lambda (w*)
(make-bundle w* (map (lambda (w) (make-mail w 'go)) w*) '()))
1
3)
(on-msg
(lambda (state iw msg)
;; display the received prefabbed struct's content
(displayln (s-t msg))
(make-bundle state '() '())))))
(provide server))
(module run racket/base
(require (submod ".." client) (submod ".." server) (submod ".." shared))
(launch-many-worlds (client 'blue) (client 'red) (server)))
(require (submod "." run))