54 lines
1.5 KiB
Racket
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))
|