diff --git a/gib-gab-gob/actors.scm b/gib-gab-gob/actors.scm index fb78dc9..e8a7307 100644 --- a/gib-gab-gob/actors.scm +++ b/gib-gab-gob/actors.scm @@ -7,10 +7,14 @@ #:use-module (goblins actor-lib sealers) #:use-module (oop goops) #:use-module (ice-9 match) + #:use-module (ice-9 rdelim) #:export (^game-lobby ^client-picker)) (define (^game-lobby bcom) (define pick (pick-rps)) + + (define gobbler #f) + (methods [(register-opponent name peer sealed-pick) (format #t "Hey there, ~a! You sent me your pick of rock-paper-scissors; now I will send mine.\n" name) @@ -19,8 +23,9 @@ (define won? (rps-winner pick peer-pick)) (format #t "Opponent ~a has picked ~a (do I win? ~a)\n" name peer-pick won?) ;; Transition to gobbler/receiver - (let* ((gobbler (spawn ^gib-gab-gobbler won? #f)) - (receiver ($ gobbler 'get-receiver))) + (let* ((g (spawn ^gib-gab-gobbler won? #f)) + (receiver ($ g 'get-receiver))) + (set! gobbler g) ($ gobbler 'register-receiver (<- peer 'register-receiver receiver)))))])) (define (^client-picker bcom) @@ -28,13 +33,18 @@ (spawn-sealer-triplet)) (define pick (pick-rps)) (define won? #f) + + (define gobbler #f) + (methods [(get-sealed-pick) ($ seal-pick pick)] [(pick->unsealer peer-pick) (set! won? (rps-winner pick peer-pick)) (format #t "Peer picked ~a... a bold choice (do I win? ~a), I will send my unsealer\n" peer-pick won?) unseal-pick] - [(register-receiver receiver) ($ (spawn ^gib-gab-gobbler won? receiver) 'get-receiver)])) + [(register-receiver receiver) + ((set! gobbler (spawn ^gib-gab-gobbler won? receiver)) + $ gobbler 'get-receiver)])) ;; Actual Tic Tac Toe game @@ -62,12 +72,13 @@ ;; Convert from a prompt to a valid move. ;; TODO: validation (define (prompt->move) - (format #t "enter move > ") - (map string->number (string-tokenize (read) char-set:digit))) + (format #t "enter move? > ") + (map string->number (string-tokenize (read-line (current-input-port)) char-set:digit))) - ;; Do our move, and send it to the peer. We then await its response. + ;; Do our move. (define (move!) (let ((move (prompt->move))) + (format #t "move is ~s\n" move) ($ board 'choose! move mark) move)) @@ -104,7 +115,9 @@ (methods ;; Switch coords for clarity - [(ref coords) (match coords ((x y) (array-ref arr y x)))] + [(ref coords) ( + (format #t "coords are ~s\n" coords) + (match coords ((x y) (array-ref arr y x))))] [(chosen? coords) (not (not ($ ($ self 'ref coords) 'get)))] [(choose! coords mark-char) (if ($ self 'chosen? coords) diff --git a/gib-gab-gob/rps.scm b/gib-gab-gob/rps.scm index 1880547..9a2b735 100644 --- a/gib-gab-gob/rps.scm +++ b/gib-gab-gob/rps.scm @@ -14,14 +14,15 @@ (define-class () (vat #:accessor vat #:init-thunk spawn-vat) (lobby #:accessor lobby) + (mycapn #:accessor mycapn) (user-name #:accessor user-name #:init-keyword #:user-name)) (define-method (initialize (host ) initargs) (next-method) (with-vat (vat host) (set! (lobby host) (spawn ^game-lobby)) - (define mycapn (spawn-mycapn (new-testuds-netlayer))) - (define lobby-sref ($ mycapn 'register (lobby host) 'testuds)) + (set! (mycapn host) (spawn-mycapn (new-testuds-netlayer))) + (define lobby-sref ($ (mycapn host) 'register (lobby host) 'testuds)) (format #t "Connect to: ~a\n" (ocapn-id->string lobby-sref)))) (define (new-testuds-netlayer) @@ -36,15 +37,16 @@ (vat #:accessor vat #:init-thunk spawn-vat) (user-name #:accessor user-name #:init-keyword #:user-name) (addr #:accessor addr #:init-keyword #:addr) + (mycapn #:accessor mycapn) (lobby #:accessor lobby)) (define-method (initialize (client ) initargs) (next-method) (with-vat (vat client) + (set! (mycapn client) (spawn-mycapn (new-testuds-netlayer))) (define lobby-sref (string->ocapn-id (addr client))) - (define mycapn (spawn-mycapn (new-testuds-netlayer))) (set! (lobby client) - ($ mycapn 'enliven lobby-sref)))) + ($ (mycapn client) 'enliven lobby-sref)))) (define (join-rps user-name addr) (define client (make #:user-name user-name #:addr addr))