diff options
| author | Teddy Wing | 2021-02-03 19:12:40 +0100 | 
|---|---|---|
| committer | Teddy Wing | 2021-02-03 19:21:32 +0100 | 
| commit | b5c2f3a6ed194245e9c584f25b28d8f7c8f90218 (patch) | |
| tree | 90fec16922c592355281009a50aff85c18d45592 /l/src | |
| parent | 857302a5ac0714087a1f8d068e3bc5a15a1393d8 (diff) | |
| download | extreload-b5c2f3a6ed194245e9c584f25b28d8f7c8f90218.tar.bz2 | |
config: Initialise a new websocket-driver client on new config
Add a new `make-config` function to construct a `config` object. This
creates a new websocket-driver client and stores it in the `ws-client`
slot in the `config`.
Before this, I thought about using a writer method on the `socket-url`
slot that creates a new client. This didn't work in `make-instance`
though. Perhaps there's a way to have the `:initarg` use the writer, but
I'm not sure.
Diffstat (limited to 'l/src')
| -rw-r--r-- | l/src/config.lisp | 33 | ||||
| -rw-r--r-- | l/src/main.lisp | 2 | ||||
| -rw-r--r-- | l/src/option.lisp | 5 | 
3 files changed, 33 insertions, 7 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)) diff --git a/l/src/main.lisp b/l/src/main.lisp index afa79d8..a84e0cd 100644 --- a/l/src/main.lisp +++ b/l/src/main.lisp @@ -26,6 +26,8 @@      ;; TODO: error if no `socket-url`    (with-websocket-connection (*client*)      (wsd:on :message *client* #'ws-on-message) +    ; (wsd:on :message *client* #'(lambda (message) (ws-on-message message))) +    ;; TODO: Maybe defvar *config* and store client in the config      (websocket-send *client* (target-get-targets-msg 1)) diff --git a/l/src/option.lisp b/l/src/option.lisp index 22e6052..2c3f0d0 100644 --- a/l/src/option.lisp +++ b/l/src/option.lisp @@ -37,6 +37,5 @@          (opts:exit 64)) -    (make-instance 'config -                   :socket-url (getf options :socket-url) -                   :extension-ids free-args))) +    (make-config :socket-url (getf options :socket-url) +                 :extension-ids free-args))) | 
