r10829: keep trying re-adding logger after a disconnection.
[irc-logger.git] / logger.lisp
index 6585a0f959a1230ba3be23cabd03b2ec9fbf2529..cb1a2430633082e774b653f3d57065bbdd8b87fa 100644 (file)
 
 (defun add-private-log-entry (logger fmt &rest args)
   (apply #'add-log-entry
-        (if (get-private-log-stream logger) 
+        (if (and logger (get-private-log-stream logger))
             (get-private-log-stream logger) 
-            *standard-output*)
+           *standard-output*)
         fmt args))
 
 (defun privmsg-hook (msg)
   (add-private-log-entry nil "Calling create-logger [add-logger].~%")
   (let ((logger
         (do ((new-logger 
-              (mp:with-timeout (*timeout* nil)
+              (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
+               #+sbcl sb-ext:with-timeout #+sbcl *timeout*
                 (create-logger nick server :channels channels :output output
                                :logging-stream logging-stream :password password
                                :realname realname :username username
                                :unknown-log unknown-log 
                                :formats formats
                                :async async))
-              (mp:with-timeout (*timeout* nil)
+              (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
+               #+sbcl sb-ext:with-timeout #+sbcl *timeout*
                 (create-logger nick server :channels channels :output output
                                :logging-stream logging-stream :password password
                                :realname realname :username username
            *recon-channel-names* (channel-names logger))
       (ignore-errors (remove-logger logger)))
     
-    (let ((new-logger
-          (ignore-errors
-           (add-logger *recon-nick* *recon-server*
-                       :channels *recon-channel-names*
-                       :output *recon-user-output*
-                       :password *recon-password*
-                       :realname *recon-realname*
-                       :username *recon-username*
-                       :logging-stream *recon-logging-stream*
-                       :private-log *recon-private-log*
-                       :unknown-log *recon-unknown-log*
-                       :async *recon-async*
-                       :formats *recon-formats*))))
-      (when new-logger
-       (sleep 5)
-       (when (is-connected new-logger)
-         (log-reconnection new-logger)))))
+    (do ((new-logger nil))
+        (new-logger)
+      (setq new-logger
+            (ignore-errors
+              (add-logger *recon-nick* *recon-server*
+                          :channels *recon-channel-names*
+                          :output *recon-user-output*
+                          :password *recon-password*
+                          :realname *recon-realname*
+                          :username *recon-username*
+                          :logging-stream *recon-logging-stream*
+                          :private-log *recon-private-log*
+                          :unknown-log *recon-unknown-log*
+                          :async *recon-async*
+                          :formats *recon-formats*)))
+      (cond
+       (new-logger
+       (sleep 20)
+       (cond
+         ((is-connected new-logger)
+          (log-reconnection new-logger))
+         (t
+          (log-daemon-message new-logger "Newly added logger is not connected. Removing connection and will re-attempt.")
+          (ignore-errors (remove-logger new-logger))
+          (setq new-logger nil))))
+       (t
+        (log-daemon-message nil "Got NIL for new logger. Waiting and retrying.")
+        (sleep 20)))))
   ) ;; end closure
 
 (defun daemon-monitor ()