X-Git-Url: http://dolda2000.com/gitweb/?p=doldaconnect.git;a=blobdiff_plain;f=lib%2Fguile%2Fhubmgr;h=e14044dfb13441604b5afee6de86222cf2d6c0af;hp=8da04f5d1fda7f22e7e08f248235e4470f152e10;hb=cac2915d81f71d6f778a80c40216e48129b444df;hpb=91328d65ff872c86ee23f38e87793b853b6404ea diff --git a/lib/guile/hubmgr b/lib/guile/hubmgr index 8da04f5..e14044d 100755 --- a/lib/guile/hubmgr +++ b/lib/guile/hubmgr @@ -28,6 +28,7 @@ (define connlist '()) (define statelist '()) (define logdest #t) +(define hl-mtime 0) (define (logf . args) (let ((fmt (car args)) (args (cdr args))) @@ -56,7 +57,8 @@ (begin (close-port p) lines) (read-lines (let ((lexed (dc-lexsexpr line))) - (if (> (length lexed) 0) + (if (and (> (length lexed) 0) + (not (eq? (string-ref (car lexed) 0) #\#))) (append lines (list lexed)) lines)) p)))))) (catch 'system-error @@ -70,6 +72,24 @@ (set! nl (cons o nl)))) statelist) nl)) + (catch 'system-error + (lambda () + (let ((mtime (stat:mtime (stat hl-file)))) + (if (> mtime hl-mtime) + (let* ((delta (list-delta hublist (read-hl))) + (same (car delta)) + (del (cadr delta)) + (new (caddr delta))) + (for-each (lambda (o) + (let ((el (assq o connlist))) + (if el + (begin (if (not (eq? (cdr el) 'pend)) + (dc-qcmd (list "dcnct" (cdr el)))) + (set! connlist (delq el connlist)))))) + del) + (set! hublist (append (map (lambda (o) (car o)) same) new)) + (set! hl-mtime mtime))))) + (lambda (key . args) '())) (for-each (lambda (o) (if (and (not (assq o connlist)) (not (assq o statelist))) @@ -93,6 +113,7 @@ (quiet (single-char #\q) (value #f)))))) (if (option-ref opts 'quiet #f) (set! logdest #f)) (set! hublist (read-hl)) + (set! hl-mtime (stat:mtime (stat hl-file))) (logf "read ~a hubs" (length hublist)) (dc-c&l (not (option-ref opts 'quiet #f)) (option-ref opts 'server #f) #t) (dc-ecmd-assert 200 "notify" "fn:act" "on" "msg" "on")