Skip to content

Commit f560294

Browse files
committed
[new] [#325] Add option for custom WebSocket constructor
1 parent ddde20d commit f560294

File tree

1 file changed

+36
-30
lines changed

1 file changed

+36
-30
lines changed

src/taoensso/sente.cljc

+36-30
Original file line numberDiff line numberDiff line change
@@ -1122,8 +1122,8 @@
11221122
nil))))))))
11231123

11241124
#?(:clj
1125-
(defn- create-java-client-websocket!
1126-
[{:as opts :keys [onerror-fn onmessage-fn onclose-fn uri-str headers]}]
1125+
(defn- make-client-ws-java
1126+
[{:as opts :keys [uri-str headers on-error on-message on-close]}]
11271127
(let [uri (java.net.URI. uri-str)
11281128

11291129
;; headers
@@ -1136,20 +1136,18 @@
11361136
ws-client
11371137
(proxy [WebSocketClient] [^java.net.URI uri ^java.util.Map headers]
11381138
(onOpen [^org.java_websocket.handshake.ServerHandshake handshakedata] nil)
1139-
(onError [ex] (onerror-fn ex))
1140-
(onMessage [^String message] (onmessage-fn message))
1141-
(onClose [code reason remote] (onclose-fn code reason remote)))]
1139+
(onError [ex] (on-error ex))
1140+
(onMessage [^String message] (on-message message))
1141+
(onClose [code reason remote] (on-close code reason remote)))]
11421142

11431143
;; JS client attempts to connect right away at construction time.
11441144
;; Java client doesn't need to, but we'll do anyway for consistency.
11451145
(.connect ws-client)
11461146
(do ws-client))))
11471147

11481148
#?(:cljs
1149-
(defn- create-js-client-websocket!
1150-
[{:as opts
1151-
:keys [onerror-fn onmessage-fn onclose-fn uri-str headers binary-type]}]
1152-
1149+
(defn- make-client-ws-js
1150+
[{:as opts :keys [uri-str headers on-error on-message on-close binary-type]}]
11531151
(when-let [WebSocket
11541152
(or
11551153
(enc/oget goog/global "WebSocket")
@@ -1158,19 +1156,20 @@
11581156

11591157
(let [socket (WebSocket. uri-str)]
11601158
(doto socket
1161-
(aset "onerror" onerror-fn)
1162-
(aset "onmessage" onmessage-fn) ; Nb receives both push & cb evs!
1159+
(aset "onerror" on-error)
1160+
(aset "onmessage" on-message) ; Nb receives both push & cb evs!
11631161
;; Fires repeatedly (on each connection attempt) while server is down:
1164-
(aset "onclose" onclose-fn))
1162+
(aset "onclose" on-close))
11651163

11661164
(when-let [bt binary-type] ; "arraybuffer" or "blob" (js default)
11671165
(aset socket "binaryType" bt))
11681166

11691167
socket))))
11701168

1171-
(defn- create-websocket! [{:as opts :keys [onerror-fn onmessage-fn onclose-fn uri-str headers]}]
1172-
#?(:cljs (create-js-client-websocket! opts)
1173-
:clj (create-java-client-websocket! opts)))
1169+
(defn- default-client-ws-constructor
1170+
[{:as opts :keys [on-error on-message on-close uri-str headers]}]
1171+
#?(:cljs (make-client-ws-js opts)
1172+
:clj (make-client-ws-java opts)))
11741173

11751174
(defn- get-client-csrf-token-str
11761175
"Returns non-blank client CSRF token ?string from given token string
@@ -1197,7 +1196,8 @@
11971196
backoff-ms-fn ; (fn [nattempt]) -> msecs
11981197
cbs-waiting_ ; {<cb-uuid> <fn> ...}
11991198
socket_
1200-
udt-last-comms_]
1199+
udt-last-comms_
1200+
ws-constructor]
12011201

12021202
IChSocket
12031203
(-chsk-disconnect! [chsk reason]
@@ -1266,7 +1266,7 @@
12661266
(swap-chsk-state! chsk
12671267
#(assoc % :udt-next-reconnect udt-next-reconnect)))))
12681268

1269-
onerror-fn
1269+
on-error
12701270
#?(:cljs
12711271
(fn [ws-ev]
12721272
(errorf ; ^:meta {:raw-console? true}
@@ -1286,7 +1286,7 @@
12861286
#(assoc % :last-ws-error
12871287
{:udt (enc/now-udt), :ex ex}))))
12881288

1289-
onmessage-fn ; Nb receives both push & cb evs!
1289+
on-message ; Nb receives both push & cb evs!
12901290
(fn #?(:cljs [ws-ev] :clj [ppstr])
12911291
(let [ppstr #?(:clj ppstr
12921292
:cljs (enc/oget ws-ev "data"))
@@ -1319,7 +1319,7 @@
13191319

13201320
;; Fires repeatedly (on each connection attempt) while
13211321
;; server is down:
1322-
onclose-fn
1322+
on-close
13231323
(fn #?(:cljs [ws-ev] :clj [code reason remote])
13241324
(let [last-ws-close
13251325
#?(:clj
@@ -1350,12 +1350,12 @@
13501350

13511351
?socket
13521352
(try
1353-
(create-websocket!
1353+
(ws-constructor
13541354
(merge ws-opts
1355-
{:onerror-fn onerror-fn
1356-
:onmessage-fn onmessage-fn
1357-
:onclose-fn onclose-fn
1358-
:headers headers
1355+
{:on-error on-error
1356+
:on-message on-message
1357+
:on-close on-close
1358+
:headers headers
13591359
:uri-str
13601360
(enc/merge-url-with-query-string url
13611361
(merge params ; 1st (don't clobber impl.):
@@ -1704,14 +1704,18 @@
17041704
; w/in given msecs. Should be different to server's :ws-kalive-ms.
17051705
:ws-kalive-ping-timeout-ms ; When above keep-alive ping is triggered, use this
17061706
; timeout (default: 5000) before regarding the connection
1707-
; as broken."
1707+
; as broken.
1708+
1709+
:ws-constructor ; Advanced, (fn [{:keys [uri-str headers on-message on-error on-close]}]
1710+
; => connected WebSocket, see `default-client-ws-constructor` code for
1711+
; details."
17081712

17091713
[path ?csrf-token-or-fn &
1710-
[{:keys [type protocol host port params headers recv-buf-or-n packer
1711-
ws-kalive-ms ws-kalive-ping-timeout-ms ws-opts
1714+
[{:as opts
1715+
:keys [type protocol host port params headers recv-buf-or-n packer
1716+
ws-constructor ws-kalive-ms ws-kalive-ping-timeout-ms ws-opts
17121717
client-id ajax-opts wrap-recv-evs? backoff-ms-fn]
17131718

1714-
:as opts
17151719
:or {type :auto
17161720
recv-buf-or-n (async/sliding-buffer 2048) ; Mostly for buffered-evs
17171721
packer :edn
@@ -1721,7 +1725,8 @@
17211725
backoff-ms-fn enc/exp-backoff
17221726

17231727
ws-kalive-ms 20000
1724-
ws-kalive-ping-timeout-ms 5000}}
1728+
ws-kalive-ping-timeout-ms 5000
1729+
ws-constructor default-client-ws-constructor}}
17251730

17261731
_deprecated-more-opts]]
17271732

@@ -1774,7 +1779,8 @@
17741779
:headers headers
17751780
:packer packer
17761781
:ws-kalive-ms ws-kalive-ms
1777-
:ws-kalive-ping-timeout-ms ws-kalive-ping-timeout-ms}
1782+
:ws-kalive-ping-timeout-ms ws-kalive-ping-timeout-ms
1783+
:ws-constructor default-client-ws-constructor}
17781784

17791785
ws-chsk-opts
17801786
(merge common-chsk-opts

0 commit comments

Comments
 (0)