X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fguile%2Fhubmgr;h=48c2b6581fa9e6ed5d32550e622bd638eb599d5b;hb=275514c05a8122e0a1bf66df95b5f8f7ae6cbcdb;hp=daa5482fbf33a072f350bb367cb1996d883ea088;hpb=6b0819527e4ba32b7efc92d291a72db7b986a4b8;p=doldaconnect.git diff --git a/lib/guile/hubmgr b/lib/guile/hubmgr index daa5482..48c2b65 100755 --- a/lib/guile/hubmgr +++ b/lib/guile/hubmgr @@ -1,8 +1,25 @@ #!/usr/bin/guile -s !# +; Dolda Connect - Modular multiuser Direct Connect-style client +; Copyright (C) 2007 Fredrik Tolf +; +; This program is free software; you can redistribute it and/or modify +; it under the terms of the GNU General Public License as published by +; the Free Software Foundation; either version 2 of the License, or +; (at your option) any later version. +; +; This program is distributed in the hope that it will be useful, +; but WITHOUT ANY WARRANTY; without even the implied warranty of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; GNU General Public License for more details. +; +; You should have received a copy of the GNU General Public License +; along with this program; if not, write to the Free Software +; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + (use-modules (dolcon ui) (dolcon util)) -(use-modules (ice-9 format)) +(use-modules (ice-9 format) (ice-9 rdelim)) (define max-hubs 6) (define hub-list '()) @@ -68,21 +85,20 @@ (begin (set-cdr! (assq hub connlist) (car ir)) (logf "~a state syn (~a)" (cadr hub) (car ir))) (begin (set! connlist (delq (assq hub connlist) connlist)) + (set! statelist (cons (list hub (current-time) 10) statelist)) (logf "~a failed (~a)" (cadr hub) (cdr (assq 'code er)))))))))))) hublist)) (define (hubmgr-main args) (let ((dc-server #f)) - (if (not dc-server) (set! dc-server (getenv "DCSERVER"))) - (if (not dc-server) (set! dc-server "localhost")) - (set! hublist (read-hl)) (logf "read ~a hubs" (length hublist)) (dc-c&l #t dc-server #t) (dc-ecmd-assert 200 "notify" "fn:act" "on") (dc-handle-fn) (dc-fnproc-reg 'state (lambda (fn) - (if (eq? (cdr (assq 'state fn)) 'dead) + (if (and (eq? (cdr (assq 'state fn)) 'dead) + (assq (cdr (assq 'id fn)) (map (lambda (o) (cons (cdr o) (car o))) connlist))) (begin (logf "~a died" (cdr (assq 'id fn))) (dc-qcmd (list "dcnct" (cdr (assq 'id fn)))))) (cklist)))