(define connlist '())
(define statelist '())
(define logdest #t)
+(define hl-mtime 0)
(define (logf . args)
(let ((fmt (car args)) (args (cdr args)))
(list r1 r2 l2)))
(define (read-hl)
- (catch 'system-error
- (lambda ()
- (let ((p (open-input-file hl-file)))
- (catch 'eof
- (lambda ()
- (let ((lines '()))
- (while #t
- (let ((line (read-line p)))
- (if (eof-object? line)
- (throw 'eof lines)
- (let ((lexed (dc-lexsexpr line)))
- (if (> (length lexed) 0)
- (set! lines (append lines (list lexed))))))))))
- (lambda (s a) (close-port p) a))))
- (lambda (key . args)
- '())))
+ (letrec ((read-lines (lambda (lines p)
+ (let ((line (read-line p)))
+ (if (eof-object? line)
+ (begin (close-port p)
+ lines)
+ (read-lines (let ((lexed (dc-lexsexpr line)))
+ (if (> (length lexed) 0)
+ (append lines (list lexed))
+ lines)) p))))))
+ (catch 'system-error
+ (lambda () (read-lines '() (open-input-file hl-file)))
+ (lambda (key . args) '()))))
(define (cklist)
(set! statelist (let ((nl '()) (ct (current-time)))
(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)))
+ (display same) (newline)
+ (display del) (newline)
+ (display new) (newline)
+ (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)))
(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")