[net-nittin-irc-cvs] CVS update: net-nittin-irc/protocol.lisp
Erik Enge
eenge at common-lisp.net
Mon Nov 3 20:55:08 UTC 2003
Update of /project/net-nittin-irc/cvsroot/net-nittin-irc
In directory common-lisp.net:/tmp/cvs-serv10663
Modified Files:
protocol.lisp
Log Message:
adding
add-hook, remove-hook, get-hooks and apply-to-hook
Date: Mon Nov 3 15:55:05 2003
Author: eenge
Index: net-nittin-irc/protocol.lisp
diff -u net-nittin-irc/protocol.lisp:1.2 net-nittin-irc/protocol.lisp:1.3
--- net-nittin-irc/protocol.lisp:1.2 Mon Nov 3 12:25:48 2003
+++ net-nittin-irc/protocol.lisp Mon Nov 3 15:55:00 2003
@@ -1,4 +1,4 @@
-;;;; $Id: protocol.lisp,v 1.2 2003/11/03 17:25:48 eenge Exp $
+;;;; $Id: protocol.lisp,v 1.3 2003/11/03 20:55:00 eenge Exp $
;;;; $Source: /project/net-nittin-irc/cvsroot/net-nittin-irc/protocol.lisp,v $
;;;; See LICENSE for licensing information.
@@ -48,6 +48,10 @@
:initform nil
:documentation "A list of channels known to this server as
recorded by the LIST command.")
+ (hooks
+ :initarg :hooks
+ :accessor hooks
+ :initform (make-hash-table :test #'equal))
(dangling-users
:initarg :dangling-users
:accessor dangling-users
@@ -67,15 +71,19 @@
(client-stream t)
(channels nil)
(dangling-users nil)
+ (hooks nil)
(channel-list nil))
- (make-instance 'connection
- :user user
- :server-name server-name
- :server-stream server-stream
- :client-stream client-stream
- :channels channels
- :dangling-users dangling-users
- :channel-list channel-list))
+ (let ((connection (make-instance 'connection
+ :user user
+ :server-name server-name
+ :server-stream server-stream
+ :client-stream client-stream
+ :channels channels
+ :dangling-users dangling-users
+ :channel-list channel-list)))
+ (dolist (hook hooks)
+ (add-hook connection (car hook) (cadr hook)))
+ connection))
(defmethod client-raw-log ((connection connection) message)
(let ((stream (client-stream connection)))
@@ -131,6 +139,22 @@
(dolist (channel (channels connection))
(push channel channel-list))
channel-list))
+
+(defmethod get-hooks ((connection connection) (class symbol))
+ (gethash class (hooks connection)))
+
+(defmethod add-hook ((connection connection) class hook)
+ (setf (gethash class (hooks connection))
+ (pushnew hook (gethash class (hooks connection)))))
+
+(defmethod remove-hook ((connection connection) class hook)
+ (setf (gethash class (hooks connection))
+ (delete hook (gethash class (hooks connection)))))
+
+(defmethod apply-to-hooks ((message irc-message))
+ (let ((connection (connection message)))
+ (dolist (hook (get-hooks connection (class-name (class-of message))))
+ (funcall hook message))))
;;
;; Channel
More information about the Net-nittin-irc-cvs
mailing list