Created
March 18, 2019 08:40
-
-
Save StankovicMarko/52db2ad96310cda46f5d35edf7dc584a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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