send world's name to universe properly, Closes PR 12857
This commit is contained in:
parent
4306cc2798
commit
48e07fb2ab
|
@ -131,7 +131,7 @@
|
||||||
x))))
|
x))))
|
||||||
|
|
||||||
;; InPort OutPort (X -> Y) -> (U Y Void)
|
;; InPort OutPort (X -> Y) -> (U Y Void)
|
||||||
;; process a registration from a potential client, invoke k if it is okay
|
;; process a registration from a potential client, invoke k on name if it is okay
|
||||||
(define (tcp-process-registration in out k)
|
(define (tcp-process-registration in out k)
|
||||||
(define next (tcp-receive in))
|
(define next (tcp-receive in))
|
||||||
(match next
|
(match next
|
||||||
|
@ -140,9 +140,9 @@
|
||||||
(k name)]))
|
(k name)]))
|
||||||
|
|
||||||
;; InPort OutPort (U #f String) -> Void
|
;; InPort OutPort (U #f String) -> Void
|
||||||
;; register with the server
|
;; register with the server, send the given name or make up a symbol
|
||||||
(define (tcp-register in out name)
|
(define (tcp-register in out name)
|
||||||
(define msg `(REGISTER ((name ,(if name name (symbol->string (gensym 'world)))))))
|
(define msg `(REGISTER ((name ,(if name name (gensym 'world))))))
|
||||||
(tcp-send out msg)
|
(tcp-send out msg)
|
||||||
(define ackn (tcp-receive in))
|
(define ackn (tcp-receive in))
|
||||||
(unless (equal? ackn '(OKAY))
|
(unless (equal? ackn '(OKAY))
|
||||||
|
|
|
@ -251,9 +251,7 @@
|
||||||
|
|
||||||
;; IPort OPort Sexp -> IWorld
|
;; IPort OPort Sexp -> IWorld
|
||||||
(define (create-iworld i o info)
|
(define (create-iworld i o info)
|
||||||
(if (string? info)
|
(make-iworld i o info "info field not available"))
|
||||||
(make-iworld i o info "info field not available")
|
|
||||||
(make-iworld i o (symbol->string (gensym 'iworld)) "info field not available")))
|
|
||||||
|
|
||||||
;; Player S-exp -> Void
|
;; Player S-exp -> Void
|
||||||
(define (iworld-send p sexp)
|
(define (iworld-send p sexp)
|
||||||
|
|
|
@ -1,9 +1,31 @@
|
||||||
#lang racket
|
#lang racket
|
||||||
|
|
||||||
|
;; created in response to pr 12857
|
||||||
|
;; make sure the name of a world is transmitted to the server
|
||||||
|
|
||||||
|
(require rackunit)
|
||||||
(require 2htdp/universe)
|
(require 2htdp/universe)
|
||||||
(require 2htdp/image)
|
(require 2htdp/image)
|
||||||
|
|
||||||
(big-bang '*
|
(define NAME 'ian-johnson)
|
||||||
(name 'jimbob)
|
|
||||||
(on-tick (λ (w) w) 1/3 2)
|
|
||||||
(to-draw (λ (w) (empty-scene 200 200))))
|
|
||||||
|
|
||||||
|
(define c (make-custodian))
|
||||||
|
|
||||||
|
(define-values (_ n)
|
||||||
|
(parameterize ((current-custodian c))
|
||||||
|
(launch-many-worlds
|
||||||
|
;; --- world:
|
||||||
|
(big-bang 10
|
||||||
|
(on-tick sub1)
|
||||||
|
(to-draw (lambda (w) (empty-scene 200 200)))
|
||||||
|
(name NAME)
|
||||||
|
(register LOCALHOST))
|
||||||
|
;; --- universe:
|
||||||
|
(universe #f
|
||||||
|
(on-new (lambda (u w) (make-bundle (iworld-name w) '() '())))
|
||||||
|
(on-msg (lambda (u w m) (make-bundle u '() '())))
|
||||||
|
(on-tick (lambda (u) (make-bundle u '() '())) 1 1)))))
|
||||||
|
|
||||||
|
(check-equal? n NAME)
|
||||||
|
|
||||||
|
(custodian-shutdown-all c)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#lang racket/load
|
#lang racket
|
||||||
|
|
||||||
(module shared racket/base
|
(module shared racket/base
|
||||||
(require 2htdp/universe 2htdp/image)
|
(require 2htdp/universe 2htdp/image)
|
||||||
|
@ -7,7 +7,7 @@
|
||||||
(provide s s-t (all-from-out 2htdp/universe 2htdp/image)))
|
(provide s s-t (all-from-out 2htdp/universe 2htdp/image)))
|
||||||
|
|
||||||
(module client racket
|
(module client racket
|
||||||
(require 'shared)
|
(require (submod ".." shared))
|
||||||
|
|
||||||
;; Color -> Boolean
|
;; Color -> Boolean
|
||||||
(define (client c)
|
(define (client c)
|
||||||
|
@ -15,6 +15,7 @@
|
||||||
(big-bang #true
|
(big-bang #true
|
||||||
(to-draw (lambda (w) (text (if w "hello world" "good bye") 22 c)))
|
(to-draw (lambda (w) (text (if w "hello world" "good bye") 22 c)))
|
||||||
(register LOCALHOST)
|
(register LOCALHOST)
|
||||||
|
#;
|
||||||
(stop-when (lambda (w) (> count 3)))
|
(stop-when (lambda (w) (> count 3)))
|
||||||
(on-receive
|
(on-receive
|
||||||
(lambda (w msg)
|
(lambda (w msg)
|
||||||
|
@ -22,10 +23,10 @@
|
||||||
;; send out a prefabed struct to the server
|
;; send out a prefabed struct to the server
|
||||||
(make-package (not w) (s count))))))
|
(make-package (not w) (s count))))))
|
||||||
|
|
||||||
(launch-many-worlds (client 'blue) (client 'red)))
|
(provide client))
|
||||||
|
|
||||||
(module server racket
|
(module server racket
|
||||||
(require 'shared)
|
(require (submod ".." shared))
|
||||||
|
|
||||||
(define (server)
|
(define (server)
|
||||||
(universe '()
|
(universe '()
|
||||||
|
@ -41,8 +42,12 @@
|
||||||
(displayln (s-t msg))
|
(displayln (s-t msg))
|
||||||
(make-bundle state '() '())))))
|
(make-bundle state '() '())))))
|
||||||
|
|
||||||
(thread server))
|
|
||||||
|
(provide server))
|
||||||
|
|
||||||
(require 'server)
|
(module run racket/base
|
||||||
|
(require (submod ".." client) (submod ".." server) (submod ".." shared))
|
||||||
|
|
||||||
|
(launch-many-worlds (client 'blue) (client 'red) (server)))
|
||||||
|
|
||||||
(require 'client)
|
(require (submod "." run))
|
Loading…
Reference in New Issue
Block a user