aboutsummaryrefslogtreecommitdiffstats
path: root/l/src/config.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'l/src/config.lisp')
-rw-r--r--l/src/config.lisp33
1 files changed, 29 insertions, 4 deletions
diff --git a/l/src/config.lisp b/l/src/config.lisp
index 6b31dac..eb8bede 100644
--- a/l/src/config.lisp
+++ b/l/src/config.lisp
@@ -13,10 +13,35 @@
:initarg :reload-current-tab
:initform nil
:reader reload-current-tab
- :documentation "True if the current tab should be reloaded")))
+ :documentation "True if the current tab should be reloaded")
+
+ (ws-client
+ :documentation "WebSocket client")))
(defmethod print-object ((object config) stream)
(print-unreadable-object (object stream :type t)
- (with-slots (socket-url extension-ids reload-current-tab) object
- (format stream ":socket-url ~s :extension-ids ~s :reload-current-tab ~s"
- socket-url extension-ids reload-current-tab))))
+ (with-slots (socket-url extension-ids reload-current-tab ws-client) object
+ (format stream
+ ":socket-url ~s :extension-ids ~s :reload-current-tab ~s :ws-client ~s"
+ socket-url extension-ids reload-current-tab ws-client))))
+
+;; TODO: (make-config) instead, initialise ws-client in initialiser
+(defgeneric (setf socket-url) (url config))
+
+(defmethod (setf socket-url) (url (config config))
+ "Set `socket-url` and initialise a new `websocket-driver:client` in the
+`ws-client` slot"
+ (setf (slot-value config 'socket-url) url)
+
+ (setf (slot-value config 'ws-client) (wsd:make-client url)))
+
+(defun make-config (&key socket-url extension-ids reload-current-tab)
+ (let ((config (make-instance 'config
+ :socket-url socket-url
+ :extension-ids extension-ids
+ :reload-current-tab reload-current-tab)))
+
+ ;; Initialise a new websocket-driver client
+ (setf (slot-value config 'ws-client) (wsd:make-client socket-url))
+
+ config))