Skip to content

Instantly share code, notes, and snippets.

@StankovicMarko
Created March 18, 2019 08:40
Show Gist options
  • Save StankovicMarko/52db2ad96310cda46f5d35edf7dc584a to your computer and use it in GitHub Desktop.
Save StankovicMarko/52db2ad96310cda46f5d35edf7dc584a to your computer and use it in GitHub Desktop.
(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))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment