-(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 <repl-manager> (<actor>)
+ (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-am-i-alive? repl-manager)
+ (poll-coop-repl-server server)
+ (8sleep (repl-manager-poll-every repl-manager))))