X-Git-Url: https://jxself.org/git/?p=8sync.git;a=blobdiff_plain;f=8sync%2Frepl.scm;h=ddcd50b0f168d82748dc2ee0e74182c8407af9a1;hp=4cf60b255df6b4b85031a6bed9b3e0d670b609fa;hb=a02a901d3869fc56d10597347ccbdd0df5c7e119;hpb=14a5e83316eb2b48eeda2282a21f7cde06937e84 diff --git a/8sync/repl.scm b/8sync/repl.scm index 4cf60b2..ddcd50b 100644 --- a/8sync/repl.scm +++ b/8sync/repl.scm @@ -19,11 +19,14 @@ (define-module (8sync repl) #:use-module (oop goops) #:use-module (8sync) + #:use-module (fibers) #:use-module (8sync daydream) #:use-module (srfi srfi-1) + #:use-module (ice-9 atomic) #:use-module (system repl server) #:use-module (system repl coop-server) - #:export ()) + #:export ( + spawn-repl)) (define-actor () ((add-subscriber repl-manager-add-subscriber) @@ -79,3 +82,24 @@ (set! (.subscribers repl-manager) (remove (lambda (x) (equal? x (message-from message))) (.subscribers repl-manager)))) + + + +(define* (spawn-repl #:key (path "/tmp/8sync-socket") + (socket (make-unix-domain-server-socket #:path path)) + (poll-every 1/30) + (stop? (make-atomic-box #f)) + (on-update #f)) + "Spawn a cooperative REPL in a new fiber." + (define server + (spawn-coop-repl-server socket)) + (spawn-fiber + (lambda () + (while (not (atomic-box-ref stop?)) + ;; Poll the server + (poll-coop-repl-server server) + ;; Call update hook, if any + (and on-update (on-update)) + ;; Take a break! + (sleep poll-every)) + (close socket))))