This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-12-16
Channels
- # adventofcode (43)
- # announcements (31)
- # aws (2)
- # babashka (58)
- # babashka-sci-dev (4)
- # beginners (107)
- # calva (11)
- # cider (25)
- # clj-commons (8)
- # clj-kondo (24)
- # clojure (35)
- # clojure-argentina (1)
- # clojure-europe (25)
- # clojure-italy (5)
- # clojure-nl (11)
- # clojure-norway (39)
- # clojure-spec (11)
- # clojure-uk (3)
- # conjure (2)
- # core-async (19)
- # cursive (33)
- # data-science (2)
- # datomic (50)
- # deps-new (1)
- # emacs (3)
- # events (4)
- # figwheel-main (10)
- # fulcro (63)
- # graalvm (7)
- # holy-lambda (17)
- # introduce-yourself (1)
- # java (15)
- # jobs (1)
- # jobs-discuss (7)
- # malli (24)
- # meander (16)
- # nextjournal (19)
- # off-topic (2)
- # polylith (4)
- # portal (10)
- # re-frame (3)
- # reagent (19)
- # reitit (14)
- # releases (2)
- # remote-jobs (1)
- # reveal (19)
- # shadow-cljs (1)
- # sql (21)
- # testing (4)
- # xtdb (22)
anyone has an example with reitit + sente?
I couldn't configure it right
(defn api-routes []
(ring/router
[["/chsk" {:get ws/handshake-handler
:post ws/post-handler}]
...
and my sente handlers are straight from the exampleswell, slightly:
(let [chsk-server (sente/make-channel-socket-server!
(get-sch-adapter)
{:user-id-fn (fn [ring-req]
(or (-> ring-req :session :uid)
(:client-id ring-req)))})
{:keys [ch-recv send-fn
ajax-post-fn ajax-get-or-ws-handshake-fn]} chsk-server]
(defonce handshake-handler ajax-get-or-ws-handshake-fn)
(defonce post-handler ajax-post-fn)
(defonce ch-chsk ch-recv)
(defn chsk-send! [uid ev] (send-fn uid ev)))

This needs to be in this way??? why not something like:
(def sente-config
(let [packer (sente-transit/->TransitPacker :json
{:handlers {}}
{})
{:keys [ch-recv
send-fn
connected-uids
ajax-post-fn
ajax-get-or-ws-handshake-fn]} (sente/make-channel-socket-server!
(get-sch-adapter)
{:packer packer})]
(add-watch connected-uids :connected-uids
(fn [_ _ old new]
(when (not= old new)
(infof "Connected uids change: %s" new))))
{:ring-ajax-post ajax-post-fn
:ring-ajax-get-or-ws-handshake ajax-get-or-ws-handshake-fn
; ChannelSocket's receive channel
:ch-chsk ch-recv
; ChannelSocket's send API fn
:chsk-send! send-fn
; Watchable, read-only atom
:connected-uids connected-uids}))
that seems roughly equivalent, sure, but you gotta make sure to call (sente/start-server-chsk-router! ch-chsk event-msg-handler)
at some point, where event-msg-handler is my multimethod that dispatches on :id
or i guess in your case (sente/start-server-chsk-router! (:ch-chsk sente-config) event-msg-handler)
Where is the (sente/start-server-chsk-router! (:ch-chsk sente-config) event-msg-handler)
???
is in the main???
Sure! I have it in an integrant method but you can also just plop it as a top level form as a side effect if you want
Check out the bottom of the server file in the official example repo
my chsk-send!
is explicit so I can get linting from clj-kondo
, but itβs equivalent to (def chsk-send! send-fn)
client code:
(def ?csrf-token
(when-let [el (.getElementById js/document "sente-csrf-token")]
(.getAttribute el "data-csrf-token")))
(if-not ?csrf-token
(println "CSRF token NOT detected in HTML, default Sente config will reject requests")
(let [{:keys [ch-recv send-fn]}
(sente/make-channel-socket-client!
"/chsk"
?csrf-token
{:type :auto
:wrap-recv-evs? false})]
(def ch-chsk ch-recv)
(defn ws-send!
([ev] (send-fn ev))
([ev ?timeout ?cb] (send-fn ev ?timeout ?cb)))))