Skip to content

Commit 6e62ce9

Browse files
committed
Allow removal of handlers on endpoint and session
1 parent 73ad228 commit 6e62ce9

File tree

2 files changed

+37
-25
lines changed

2 files changed

+37
-25
lines changed

websocket/endpoint.lisp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,32 +47,36 @@
4747

4848
;; TODO: signal error when unknown class options passed
4949
(defmethod shared-initialize :after ((class endpoint-class) slot-names
50-
&key on-open on-close on-error on-message session-class &allow-other-keys)
50+
&key on-open on-close on-error on-message session-class &allow-other-keys)
5151
(declare (ignore slot-names))
52-
(when on-open
53-
(let* ((handler (eval (car on-open)))
54-
(handler-lambda-list (function-lambda-list handler)))
52+
(if-let ((handler (eval (car on-open))))
53+
(let ((handler-lambda-list (function-lambda-list handler)))
5554
(check-open-handler-lambda-list handler-lambda-list)
5655
(setf (slot-value class 'open-handler) handler
57-
(slot-value class 'open-handler-lambda-list) handler-lambda-list)))
58-
(when on-close
59-
(let* ((handler (eval (car on-close)))
60-
(handler-lambda-list (function-lambda-list handler)))
56+
(slot-value class 'open-handler-lambda-list) handler-lambda-list))
57+
(setf (slot-value class 'open-handler) nil
58+
(slot-value class 'open-handler-lambda-list) nil))
59+
(if-let ((handler (eval (car on-close))))
60+
(let ((handler-lambda-list (function-lambda-list handler)))
6161
(check-close-handler-lambda-list handler-lambda-list)
6262
(setf (slot-value class 'close-handler) handler
63-
(slot-value class 'close-handler-lambda-list) handler-lambda-list)))
64-
(when on-error
65-
(let* ((handler (eval (car on-error)))
66-
(handler-lambda-list (function-lambda-list handler)))
63+
(slot-value class 'close-handler-lambda-list) handler-lambda-list))
64+
(setf (slot-value class 'close-handler) nil
65+
(slot-value class 'close-handler-lambda-list) nil))
66+
(if-let ((handler (eval (car on-error))))
67+
(let ((handler-lambda-list (function-lambda-list handler)))
6768
(check-error-handler-lambda-list handler-lambda-list)
6869
(setf (slot-value class 'error-handler) handler
69-
(slot-value class 'error-handler-lambda-list) handler-lambda-list)))
70-
(when on-message
71-
(let* ((handler (eval (car on-message)))
72-
(handler-lambda-list (function-lambda-list handler)))
70+
(slot-value class 'error-handler-lambda-list) handler-lambda-list))
71+
(setf (slot-value class 'error-handler) nil
72+
(slot-value class 'error-handler-lambda-list) nil))
73+
(if-let (handler (eval (car on-message)))
74+
(let ((handler-lambda-list (function-lambda-list handler)))
7375
(check-message-handler-lambda-list handler-lambda-list)
7476
(setf (slot-value class 'message-handler) handler
75-
(slot-value class 'message-handler-lambda-list) handler-lambda-list)))
77+
(slot-value class 'message-handler-lambda-list) handler-lambda-list))
78+
(setf (slot-value class 'message-handler) nil
79+
(slot-value class 'message-handler-lambda-list) nil))
7680
(when session-class
7781
(setf (slot-value class 'session-class) (eval (car session-class)))))
7882

websocket/session.lisp

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,30 +56,38 @@
5656
&key on-open on-close on-error on-message
5757
&allow-other-keys)
5858
(declare (ignore slot-names))
59-
(when on-open
59+
(if on-open
6060
(let* ((handler (eval (car on-open)))
6161
(handler-lambda-list (function-lambda-list handler)))
6262
(check-open-handler-lambda-list handler-lambda-list)
6363
(setf (slot-value class 'open-handler) handler
64-
(slot-value class 'open-handler-lambda-list) handler-lambda-list)))
65-
(when on-close
64+
(slot-value class 'open-handler-lambda-list) handler-lambda-list))
65+
(setf (slot-value class 'open-handler) nil
66+
(slot-value class 'open-handler-lambda-list) nil))
67+
(if on-close
6668
(let* ((handler (eval (car on-close)))
6769
(handler-lambda-list (function-lambda-list handler)))
6870
(check-close-handler-lambda-list handler-lambda-list)
6971
(setf (slot-value class 'close-handler) handler
70-
(slot-value class 'close-handler-lambda-list) handler-lambda-list)))
71-
(when on-error
72+
(slot-value class 'close-handler-lambda-list) handler-lambda-list))
73+
(setf (slot-value class 'close-handler) nil
74+
(slot-value class 'close-handler-lambda-list) nil))
75+
(if on-error
7276
(let* ((handler (eval (car on-error)))
7377
(handler-lambda-list (function-lambda-list handler)))
7478
(check-error-handler-lambda-list handler-lambda-list)
7579
(setf (slot-value class 'error-handler) handler
76-
(slot-value class 'error-handler-lambda-list) handler-lambda-list)))
77-
(when on-message
80+
(slot-value class 'error-handler-lambda-list) handler-lambda-list))
81+
(setf (slot-value class 'error-handler) nil
82+
(slot-value class 'error-handler-lambda-list) nil))
83+
(if on-message
7884
(let* ((handler (eval (car on-message)))
7985
(handler-lambda-list (function-lambda-list handler)))
8086
(check-message-handler-lambda-list handler-lambda-list)
8187
(setf (slot-value class 'message-handler) handler
82-
(slot-value class 'message-handler-lambda-list) handler-lambda-list))))
88+
(slot-value class 'message-handler-lambda-list) handler-lambda-list))
89+
(setf (slot-value class 'message-handler) nil
90+
(slot-value class 'message-handler-lambda-list) nil)))
8391

8492
(defgeneric close-session (session &optional reason)
8593
(:method ((session session) &optional reason)

0 commit comments

Comments
 (0)