2023-02-03 13:18:17 +00:00
|
|
|
(define-module (gib-gab-gob actors)
|
|
|
|
#:use-module (gib-gab-gob rps)
|
|
|
|
#:use-module (goblins)
|
|
|
|
#:use-module (goblins actor-lib methods)
|
|
|
|
#:use-module (goblins actor-lib sealers)
|
|
|
|
#:use-module (oop goops)
|
2023-02-05 12:49:01 +00:00
|
|
|
#:export (^game-lobby ^client-picker))
|
2023-02-03 13:18:17 +00:00
|
|
|
|
2023-02-05 13:26:35 +00:00
|
|
|
(define (^game-lobby bcom)
|
2023-02-03 14:19:04 +00:00
|
|
|
(define pick (pick-rps))
|
2023-02-03 13:18:17 +00:00
|
|
|
(methods
|
2023-02-05 14:20:04 +00:00
|
|
|
[(register-opponent name client sealed-pick)
|
2023-02-03 13:18:17 +00:00
|
|
|
(format #t "Hey there, ~a! You sent me your pick of rock-paper-scissors; now I will send mine.\n" name)
|
|
|
|
(on (<- (<- client 'exchange-pick-for-unsealer pick) sealed-pick)
|
|
|
|
(lambda (peer-pick)
|
2023-02-05 14:20:04 +00:00
|
|
|
(format #t "The peer has picked ~a (do I win? ~s)\n" peer-pick (rps-winner pick peer-pick))))]))
|
2023-02-03 13:18:17 +00:00
|
|
|
|
|
|
|
(define (^client-picker bcom)
|
|
|
|
(define-values (seal-pick unseal-pick my-pick?)
|
|
|
|
(spawn-sealer-triplet))
|
2023-02-03 14:19:04 +00:00
|
|
|
(define pick (pick-rps))
|
2023-02-03 13:18:17 +00:00
|
|
|
(methods
|
2023-02-05 14:20:04 +00:00
|
|
|
[(get-sealed-pick) ($ seal-pick pick)]
|
|
|
|
[(exchange-pick-for-unsealer peer-pick)
|
2023-02-05 12:49:01 +00:00
|
|
|
(format #t "Peer picked ~a... a bold choice (do I win? ~s), i will send my unsealer\n" peer-pick (rps-winner pick peer-pick))
|
2023-02-05 14:20:04 +00:00
|
|
|
unseal-pick]))
|