;;;; remote-mailbox-service.scm ;;;; Kon Lovett, Nov '21 (module remote-mailbox-service (;export remote-mailbox-service remote-mailbox-service-info remote-mailbox-service-stop!) (import scheme (chicken base) (chicken type) remote-mailbox-server) (include-relative "remote-mailbox.types") (: remote-mailbox-service (mailbox-name #!optional boolean * -> mailbox)) (: remote-mailbox-service-info (-> remote-mailbox-server thread)) (: remote-mailbox-service-stop! (-> void)) ;;; (define remote-mailbox-service) (define remote-mailbox-service-info) (define remote-mailbox-service-stop!) (let ((+rmbs+ (the (or false remote-mailbox-server) #f)) (+thrd+ (the (or false thread) #f)) ) (define (remote-mailbox-service-start! debug) (set! +rmbs+ (make-remote-mailbox-server #:name 'remote-mailbox-default-server #:debug debug)) (set! +thrd+ (remote-mailbox-server-start! +rmbs+)) ) (set! remote-mailbox-service-info (lambda () (values +rmbs+ +thrd+))) (set! remote-mailbox-service-stop! (lambda () (remote-mailbox-server-stop! +rmbs+))) (set! remote-mailbox-service (lambda (name #!optional (create? (void)) (debug #f)) ;lazy service start (unless +rmbs+ (remote-mailbox-service-start! debug)) ;service needed for default(s) (let ((create? (if (not (eq? create? (void))) create? (remote-mailbox-server-auto-create? +rmbs+))) ) (server-local-mailbox +rmbs+ name create?) ) ) ) ) ) ;module remote-mailbox-service