Guest User

Untitled

a guest
Jun 4th, 2025
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.28 KB | None | 0 0
  1. (use-modules (srfi srfi-9)
  2.              (srfi srfi-1)
  3.              (srfi srfi-11)
  4.              ((goblins) #:hide ($))
  5.              ((goblins) #:select ($) #:prefix $)
  6.              (ice-9 match)
  7.              (goblins utils hashmap)
  8.              (goblins actor-lib cell)
  9.              (goblins actor-lib methods)
  10.              (goblins actor-lib on)
  11.              (goblins ocapn ids)
  12.              (goblins ocapn captp)
  13.              (goblins ocapn netlayer prelay)
  14.              (goblins ocapn netlayer tcp-tls)
  15.              (goblins ocapn netlayer prelay-utils)
  16.              (goblins persistence-store syrup)
  17.              (goblins persistence-store memory)
  18.              (fibers conditions))
  19.  
  20. (define can-quit?
  21.    (make-condition))
  22.  
  23. (define-actor (^root bcom nose mycapn)
  24.   (methods
  25.    [(nose) nose]
  26.    [(mycapn) mycapn]
  27.    [(register new-mycapn)
  28.     (bcom (^root bcom nose new-mycapn))]))
  29.  
  30. (define-actor (^nose bcom)
  31.   (lambda ()
  32.     (format #t "Got booped!")
  33.     #f))
  34.  
  35. (define boop-env
  36.   (namespace-env '(boop client friends) ^nose ^root))
  37.  
  38. (define prelay-account-sref
  39.   (string->ocapn-id
  40.    (cadr (command-line))))
  41.  
  42. (define-values (friends-vat root)
  43.   (spawn-persistent-vat
  44.    (persistence-env-compose boop-env prelay-utils-env captp-env tcp-tls-netlayer-env)
  45.    (lambda ()
  46.      (spawn ^root (spawn ^nose) #f))
  47.    (make-syrup-store "friends.syrup")
  48.    #:name "friends"))
  49.  
  50.  
  51. (define nose
  52.   (with-vat friends-vat
  53.     ($$ root 'nose)))
  54.  
  55. (define (get-or-create-mycapn)
  56.   (on (<- root 'mycapn)
  57.       (lambda (maybe-mycapn)
  58.         (format #t "maybe mycapn is ~a" maybe-mycapn)
  59.         (pk 'fetch)
  60.         (or maybe-mycapn
  61.             (on (spawn-mycapn (fetch-and-spawn-prelay-netlayer prelay-account-sref #:encrypted? #f))
  62.                 (lambda (mycapn)
  63.                   (format #t "registering new mycapn")
  64.                   ($$ root 'register mycapn)
  65.                   mycapn)
  66.                 #:promise? #t)))
  67.       #:promise? #t))
  68.  
  69. (with-vat friends-vat
  70.   (on (get-or-create-mycapn)
  71.       (lambda (mycapn)
  72.         (format #t "mycapn is ~a nose ~a" mycapn nose)
  73.         (on (<- mycapn 'register nose 'prelay)
  74.             (lambda (sref)
  75.               (format #t "People can now boop you at ~a" (ocapn-id->string sref))
  76.               #f)))))
  77.  
  78. (wait can-quit?)
  79.  
Advertisement
Add Comment
Please, Sign In to add comment