From 3e9d075cda7f266ae245600694aaf23dc55c05b9 Mon Sep 17 00:00:00 2001 From: Vivianne Langdon Date: Sun, 9 Jul 2023 22:45:57 -0700 Subject: [PATCH] Code for joiner too! It works! --- gib-gab-gob/game.scm | 8 ++++++-- gib-gab-gob/rps.scm | 14 +++----------- gib-gab-gob/ui/console.scm | 20 +++++++++++++++++++- scripts/make-joiner.in | 2 +- 4 files changed, 29 insertions(+), 15 deletions(-) diff --git a/gib-gab-gob/game.scm b/gib-gab-gob/game.scm index 0109a82..9b9a58d 100644 --- a/gib-gab-gob/game.scm +++ b/gib-gab-gob/game.scm @@ -19,7 +19,8 @@ (else 'play))) (define (signal-turn) ;; any better way to do this? - (spawn-fiber (λ () (put-message my-turn+ #t)))) + (spawn-fiber (λ () (put-message my-turn+ #t))) + #f) (define (switch-turn!) (set! %my-turn? (not %my-turn?)) (when %my-turn? (signal-turn)) @@ -39,7 +40,10 @@ [(my-mark) mark] [(state) (%state)] [(initialize!) - (on (<- peer 'try-transition) (λ (status) (format #t "Peer's status: ~a\n" status)) #:promise? #t)] + (on (<- peer 'try-transition) + (λ (status) + (format #t "Peer's status: ~a\n" status) + status) #:promise? #t)] [(my-turn! x y) (if %my-turn? (begin diff --git a/gib-gab-gob/rps.scm b/gib-gab-gob/rps.scm index ee87a32..0a978a6 100644 --- a/gib-gab-gob/rps.scm +++ b/gib-gab-gob/rps.scm @@ -8,7 +8,7 @@ #:use-module (goblins ocapn netlayer onion) #:use-module (gib-gab-gob board) #:use-module (fibers conditions) - #:export (make-joiner initiator/connect resolve-initiator ^game-initiator ^game-joiner)) + #:export (initiator/connect ^game-initiator ^game-joiner)) ;; ;; Initiator logic @@ -39,16 +39,8 @@ ;; ;; Joiner logic ;; -(define (make-joiner ^game-controller addr) - (define mycapn (spawn-mycapn (new-onion-netlayer))) - (define init-sref (string->ocapn-id addr)) - (define initiator ($ mycapn 'enliven init-sref)) - (define joiner (spawn ^game-joiner initiator ^game-controller)) - (on (<- initiator 'register-opponent joiner ($ joiner 'get-sealed-pick)) - (lambda (_) (<- initiator 'try-transition))) - joiner) -(define (^game-joiner bcom initiator ^game-controller) +(define (^game-joiner bcom initiator ^game-controller board my-turn+) (define-values (seal-pick unseal-pick my-pick?) (spawn-sealer-triplet)) (define pick (pick-rps)) @@ -60,7 +52,7 @@ ;; We make the assumption that initiator is to become a controller. ;; Note second arg to bcom which will return the value (this is confusing to me) ;; see https://spritely.institute/files/docs/guile-goblins/0.11.0/Object-construction.html - (bcom (^game-controller bcom (make-board) (make-condition) won? initiator) unseal-pick)])) + (bcom (^game-controller bcom board my-turn+ won? initiator) unseal-pick)])) ;; ;; Standard rock paper scissors logic follows! diff --git a/gib-gab-gob/ui/console.scm b/gib-gab-gob/ui/console.scm index f13bc30..746606b 100644 --- a/gib-gab-gob/ui/console.scm +++ b/gib-gab-gob/ui/console.scm @@ -9,7 +9,10 @@ #:use-module (fibers) #:use-module (fibers channels) #:use-module (goblins) - #:export (make-initiator)) + #:use-module (goblins ocapn captp) + #:use-module (goblins ocapn ids) + #:use-module (goblins ocapn netlayer onion) + #:export (make-initiator make-joiner)) ;; Module for simple console-based UI (no curses) @@ -70,3 +73,18 @@ (define initiator (spawn ^game-initiator ^ggg-controller board my-turn+)) (initiator/connect initiator) (begin-game-loop board initiator my-turn+))) + +(define (make-joiner ^game-controller addr) + (with-vat + (spawn-vat #:name "Joiner Game") + (define mycapn (spawn-mycapn (new-onion-netlayer))) + (define my-turn+ (make-channel)) + (define board (make-board)) + (let* ((init-sref (string->ocapn-id addr)) + (initiator ($ mycapn 'enliven init-sref)) + (joiner (spawn ^game-joiner initiator ^game-controller board my-turn+)) + (sealed ($ joiner 'get-sealed-pick))) + (on (<- initiator 'register-opponent joiner sealed) + (λ (_) + (on ($ joiner 'initialize!) + (λ (status) (begin-game-loop board joiner my-turn+) #f))))))) diff --git a/scripts/make-joiner.in b/scripts/make-joiner.in index e86347b..c096eba 100644 --- a/scripts/make-joiner.in +++ b/scripts/make-joiner.in @@ -3,7 +3,7 @@ !# (use-modules - (gib-gab-gob rps) + (gib-gab-gob ui console) (gib-gab-gob game)) (apply make-joiner (cons ^ggg-controller (cdr (command-line))))