X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;ds=sidebyside;f=8sync%2Frepl.scm;h=006540367dcea540a8046bff154f17264e6f0770;hb=47de7ccf21d3a2a615271d0ab007ce3d15ffa23d;hp=bc68138eb3b5c353d9fe0e9d8e50dc130c27d93a;hpb=9bb036f18457a6c2d24343e21e6950f9df5043e7;p=8sync.git
diff --git a/8sync/repl.scm b/8sync/repl.scm
index bc68138..0065403 100644
--- a/8sync/repl.scm
+++ b/8sync/repl.scm
@@ -17,23 +17,42 @@
;;; License along with 8sync. If not, see .
(define-module (8sync repl)
- #:use-module (ice-9 q)
- #:use-module (8sync agenda)
+ #:use-module (oop goops)
+ #:use-module (8sync)
+ #:use-module (system repl server)
#:use-module (system repl coop-server)
- #:export (make-coop-server-handler
- spawn-and-queue-repl-server!))
+ #:export ())
-(define (make-coop-server-handler coop-server)
- (define (run-self)
- (poll-coop-repl-server coop-server)
- ;; queue ourselves again
- (run-delay (run-self) (/ 1 30)))
- run-self)
+(define-class ()
+ (path #:init-keyword #:path
+ #:init-value "/tmp/8sync-socket"
+ #:getter repl-manager-path)
+ (socket #:init-value #f
+ #:accessor repl-manager-socket)
+ (poll-every #:init-keyword #:poll-every
+ #:init-value (/ 1 30)
+ #:getter repl-manager-poll-every)
+ (actions #:allocation #:each-subclass
+ ;; @@: Should we add a stop action?
+ #:init-value (build-actions
+ (*cleanup* repl-manager-cleanup)
+ (init repl-manager-init))))
+
+(define (repl-manager-cleanup repl-manager message)
+ ;; Close the socket, if open
+ (and=> (repl-manager-socket repl-manager)
+ close)
+ ;; Delete the file, if it exists
+ (when (file-exists? (repl-manager-path repl-manager))
+ (delete-file (repl-manager-path repl-manager))))
+
+(define (repl-manager-init repl-manager message)
+ (define socket
+ (make-unix-domain-server-socket #:path (repl-manager-path repl-manager)))
+ (define server
+ (spawn-coop-repl-server socket))
+ (set! (repl-manager-socket repl-manager) socket)
+ (while (actor-alive? repl-manager)
+ (poll-coop-repl-server server)
+ (8sleep (repl-manager-poll-every repl-manager))))
-(define* (spawn-and-queue-repl-server! agenda #:optional port)
- (let ((coop-server
- (if port
- (spawn-coop-repl-server port)
- (spawn-coop-repl-server))))
- (enq! (agenda-queue agenda)
- (make-coop-server-handler coop-server))))