[net-nittin-irc-cvs] CVS update: net-nittin-irc/TODO net-nittin-irc/event.lisp net-nittin-irc/package.lisp net-nittin-irc/protocol.lisp net-nittin-irc/variable.lisp

Erik Enge eenge at common-lisp.net
Fri Nov 14 16:13:22 UTC 2003


Update of /project/net-nittin-irc/cvsroot/net-nittin-irc
In directory common-lisp.net:/tmp/cvs-serv27042

Modified Files:
	TODO event.lisp package.lisp protocol.lisp variable.lisp 
Log Message:
adding support for return code 320 from dancerd

fixing a bug related to nickname changes that would leave the connection
object in an inconsistent state

Date: Fri Nov 14 11:13:22 2003
Author: eenge

Index: net-nittin-irc/TODO
diff -u net-nittin-irc/TODO:1.6 net-nittin-irc/TODO:1.7
--- net-nittin-irc/TODO:1.6	Mon Nov 10 12:25:38 2003
+++ net-nittin-irc/TODO	Fri Nov 14 11:13:21 2003
@@ -11,3 +11,13 @@
      equivalence of two nicknames or channel names.
 
     So when we do FIND-USER etc. we need to be mindful of this fact.
+
+  - Need to optimize the user approach.  When joining ten high-volume
+  (2000+ users total) channels there seems to be O(n) or somesuch
+  performance because of, I'm guessing, the way FIND-USER works.
+
+  - If a message (as in PRIVMSG) is longer than 512 characters
+  (including carriage return and linefeed) we should probably split
+  the message into several on behalf of the user.
+
+  - Add ignore


Index: net-nittin-irc/event.lisp
diff -u net-nittin-irc/event.lisp:1.6 net-nittin-irc/event.lisp:1.7
--- net-nittin-irc/event.lisp:1.6	Mon Nov 10 12:25:38 2003
+++ net-nittin-irc/event.lisp	Fri Nov 14 11:13:21 2003
@@ -1,4 +1,4 @@
-;;;; $Id: event.lisp,v 1.6 2003/11/10 17:25:38 eenge Exp $
+;;;; $Id: event.lisp,v 1.7 2003/11/14 16:13:21 eenge Exp $
 ;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/event.lisp,v $
 
 ;;;; See LICENSE for licensing information.
@@ -868,15 +868,15 @@
 (defmethod irc-message-event ((message irc-nick-message))
   (apply-to-hooks message)
   (client-log (connection message) message)
-  (when (self-message-p message)
-    (setf (nickname (user (connection message)))
-          (trailing-argument message)))
-  (let ((user (find-user (connection message) (source message))))
-    (if user
-        (setf (nickname user) (trailing-argument message))
-        (client-raw-log (connection message)
-                        (format nil "Could not find user with nick ~A~%"
-                                (source message))))))
+  (if (self-message-p message)
+      (change-nickname (connection message) (user (connection message))
+                       (trailing-argument message))
+      (let ((user (find-user (connection message) (source message))))
+        (if user
+            (change-nickname (connection message) user (trailing-argument message))
+            (client-raw-log (connection message)
+                            (format nil "Could not find user with nick ~A~%"
+                                    (source message)))))))
 
 (defmethod irc-message-event ((message irc-notice-message))
   (apply-to-hooks message)


Index: net-nittin-irc/package.lisp
diff -u net-nittin-irc/package.lisp:1.4 net-nittin-irc/package.lisp:1.5
--- net-nittin-irc/package.lisp:1.4	Mon Nov 10 12:25:38 2003
+++ net-nittin-irc/package.lisp	Fri Nov 14 11:13:21 2003
@@ -1,4 +1,4 @@
-;;;; $Id: package.lisp,v 1.4 2003/11/10 17:25:38 eenge Exp $
+;;;; $Id: package.lisp,v 1.5 2003/11/14 16:13:21 eenge Exp $
 ;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/package.lisp,v $
 
 ;;;; See the LICENSE file for licensing information.
@@ -26,6 +26,7 @@
              :remove-hooks
              :get-hooks
              :make-user
+             :change-nickname
              :make-connection
              :make-channel
              :client-log


Index: net-nittin-irc/protocol.lisp
diff -u net-nittin-irc/protocol.lisp:1.7 net-nittin-irc/protocol.lisp:1.8
--- net-nittin-irc/protocol.lisp:1.7	Mon Nov 10 12:25:38 2003
+++ net-nittin-irc/protocol.lisp	Fri Nov 14 11:13:21 2003
@@ -1,4 +1,4 @@
-;;;; $Id: protocol.lisp,v 1.7 2003/11/10 17:25:38 eenge Exp $
+;;;; $Id: protocol.lisp,v 1.8 2003/11/14 16:13:21 eenge Exp $
 ;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/protocol.lisp,v $
 
 ;;;; See LICENSE for licensing information.
@@ -323,7 +323,7 @@
   (setf (channels connection) (remove channel (channels connection))))
 
 (defmethod remove-users ((channel channel))
-  (setf (users channel) (make-hash-table :test #'equal)))
+  (clrhash (users channel)))
 
 ;;
 ;; User
@@ -388,7 +388,7 @@
   (remhash (nickname user) (users channel)))
 
 (defmethod remove-user-everywhere ((connection connection) (user user))
-  (dolist (channel (all-channels connection))
+  (dolist (channel (channels connection))
     (remove-user channel user)))
 
 (defmethod find-or-make-user ((connection connection) nickname &key (username "")
@@ -398,6 +398,16 @@
                  :username username
                  :hostname hostname
                  :realname realname)))
+
+(defmethod change-nickname ((connection connection) (user user) new-nickname)
+  (dolist (channel (channels connection))
+    (let ((old-user (gethash (nickname user) (users channel))))
+      (when old-user
+        (remhash (nickname user) (users channel))
+        (setf (nickname user) new-nickname)
+        (add-user channel user))))
+  (when (equal user (user connection))
+    (setf (nickname user) new-nickname)))
 
 ;; IRC Message
 ;;


Index: net-nittin-irc/variable.lisp
diff -u net-nittin-irc/variable.lisp:1.4 net-nittin-irc/variable.lisp:1.5
--- net-nittin-irc/variable.lisp:1.4	Fri Nov  7 10:40:19 2003
+++ net-nittin-irc/variable.lisp	Fri Nov 14 11:13:21 2003
@@ -1,4 +1,4 @@
-;;;; $Id: variable.lisp,v 1.4 2003/11/07 15:40:19 eenge Exp $
+;;;; $Id: variable.lisp,v 1.5 2003/11/14 16:13:21 eenge Exp $
 ;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/variable.lisp,v $
 
 ;;;; See the LICENSE file for licensing information.
@@ -110,6 +110,7 @@
     (317 :rpl_whoisidle)
     (318 :rpl_endofwhois)
     (319 :rpl_whoischannels)
+    (320 :rpl_whoisidentified) ; Seen in dancer ircd source
     (321 :rpl_liststart)
     (322 :rpl_list)
     (323 :rpl_listend)





More information about the Net-nittin-irc-cvs mailing list