Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns project.websocket
- (:require
- [taoensso.sente :as sente]
- [taoensso.encore :as encore]
- [re-frame.core :as rf]))
- (defn start-websocket [csrf-token]
- (let [{:keys [chsk ch-recv send-fn state]}
- (sente/make-channel-socket-client! "/chsk" csrf-token {:type :auto})]
- (defonce chsk chsk)
- (defonce ch-chsk ch-recv) ; ChannelSocket's receive channel
- (defonce chsk-send! send-fn) ; ChannelSocket's send API fn
- (defonce chsk-state state) ; Watchable, read-only atom
- ))
- (defmulti -event-msg-handler
- "Multimethod to handle Sente `event-msg`s"
- :id ; Dispatch on event-id
- )
- (defn event-msg-handler
- "Wraps `-event-msg-handler` with logging, error catching, etc."
- [{:as ev-msg :keys [id ?data event]}]
- (-event-msg-handler ev-msg))
- (defmethod -event-msg-handler
- :default ; Default/fallback case (no other matching handler)
- [{:as ev-msg :keys [event]}]
- (println "Unhandled event: %s" event))
- (defmethod -event-msg-handler :chsk/state
- [{:as ev-msg :keys [?data]}]
- (let [[old-state-map new-state-map] (encore/have vector? ?data)]
- (if (:first-open? new-state-map)
- (println "Channel socket successfully established!: %s" new-state-map)
- (println "Channel socket state change: %s" new-state-map))))
- (defmethod -event-msg-handler :chsk/recv
- [{:as ev-msg :keys [?data]}]
- (let [[event msg] ?data
- _ (println "EVENT >>: " event " msg: " msg)]
- (if (= event :chsk/ws-ping)
- (println "Keep Alive")
- (println "here comes eveeent: " event)
- ;; (rf/dispatch [event (:coords msg)])
- )))
- (defmethod -event-msg-handler :chsk/handshake
- [{:as ev-msg :keys [?data]}]
- (let [[?uid ?csrf-token ?handshake-data] ?data]
- (println "Handshake: %s" ?data)))
- (defn abc []
- (chsk-send! [:test/first {:data (str "abc!!")}]))
- (defn start-ws []
- (start-websocket "KgR8xgDnI71Q9EPSL47o1BRiV+YkD++cgGLZpy61wxgEkPAcvH16k3SMeE2ubCeLHuhhfFNzFEuEsfMs")
- (sente/start-client-chsk-router! ch-chsk event-msg-handler))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement