Skip to content

Commit 197406a

Browse files
committed
[new] Example project: add msgpack support
1 parent 4d21a24 commit 197406a

File tree

3 files changed

+25
-16
lines changed

3 files changed

+25
-16
lines changed

example-project/src/example/client.cljs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,15 @@
6969
client<->server transit.
7070
7171
Default is to use edn, but this reference example uses a dynamic
72-
packer that can swap between edn/transit/binary for testing.
72+
packer that can swap between several packers for testing.
7373
7474
Client and server should use the same packer."
7575

7676
#_:edn ; Default
77-
(example.dynamic-packer/get-packer))
77+
#_(taoensso.sente.packers.transit/get-packer)
78+
#_(taoensso.sente.packers.msgpack/get-packer) ; Experimental
79+
(example.dynamic-packer/get-packer) ; For testing
80+
)
7881

7982
(def chsk-client
8083
(sente/make-channel-socket-client!
Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
(ns example.dynamic-packer
22
"A dynamic Sente packer that can dynamically switch
3-
between edn/transit/binary modes.
3+
between #{:edn/txt :edn/bin :transit :msgpack} modes.
44
55
Handy for testing, you wouldn't normally need/want
66
something like this in production!"
77
(:require
88
[taoensso.encore :as encore]
99
[taoensso.sente :as sente]
1010
[taoensso.sente.interfaces :as i]
11-
[taoensso.sente.packers.transit]))
11+
[taoensso.sente.packers.transit]
12+
[taoensso.sente.packers.msgpack]))
1213

13-
(defonce mode_ (atom :edn))
14+
(defonce mode_ (atom :edn/txt))
1415

1516
(defn- str->bytes [s]
1617
#?(:clj (.getBytes ^String s java.nio.charset.StandardCharsets/UTF_8)
@@ -24,22 +25,23 @@
2425

2526
(defn get-packer []
2627
(let [ep sente/edn-packer
27-
tp (taoensso.sente.packers.transit/get-packer)
28-
2928
bp ; Simple binary edn packer
3029
(reify
3130
i/IPacker2
3231
(pack [_ ws? clj cb-fn] (cb-fn {:value (str->bytes (encore/pr-edn clj))}))
3332
(unpack [_ ws? packed cb-fn] (cb-fn {:value (encore/read-edn (bytes->str packed))})))
3433

34+
tp (taoensso.sente.packers.transit/get-packer)
35+
mp (taoensso.sente.packers.msgpack/get-packer)
36+
3537
get-packer
3638
(fn []
3739
(case @mode_
38-
:edn ep
40+
:edn/txt ep
41+
:edn/bin bp
3942
:transit tp
40-
:bin bp))]
43+
:msgpack mp))]
4144

42-
(reify
43-
i/IPacker2
45+
(reify i/IPacker2
4446
(pack [_ ws? clj cb-fn] (i/pack (get-packer) ws? clj cb-fn))
4547
(unpack [_ ws? packed cb-fn] (i/unpack (get-packer) ws? packed cb-fn)))))

example-project/src/example/server.clj

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@
5555
client<->server transit.
5656
5757
Default is to use edn, but this reference example uses a dynamic
58-
packer that can swap between edn/transit/binary for testing.
58+
packer that can swap between several packers for testing.
5959
6060
Client and server should use the same packer."
6161

6262
#_:edn ; Default
63-
(example.dynamic-packer/get-packer))
63+
#_(taoensso.sente.packers.transit/get-packer)
64+
#_(taoensso.sente.packers.msgpack/get-packer) ; Experimental
65+
(example.dynamic-packer/get-packer) ; For testing
66+
)
6467

6568
(defonce chsk-server
6669
(sente/make-channel-socket-server!
@@ -276,9 +279,10 @@
276279
[{:as ev-msg :keys [?reply-fn]}]
277280
(let [new-mode
278281
(case @example.dynamic-packer/mode_
279-
:edn :transit
280-
:transit :bin
281-
:bin :edn)]
282+
:edn/txt :edn/bin
283+
:edn/bin :transit
284+
:transit :msgpack
285+
:msgpack :edn/txt)]
282286

283287
(?reply-fn new-mode)
284288
(reset! example.dynamic-packer/mode_ new-mode)))

0 commit comments

Comments
 (0)