Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. (ns project.websocket
  2. (:require
  3. [taoensso.sente :as sente]
  4. [taoensso.encore :as encore]
  5. [re-frame.core :as rf]))
  6.  
  7.  
  8.  
  9. (defn start-websocket [csrf-token]
  10. (let [{:keys [chsk ch-recv send-fn state]}
  11. (sente/make-channel-socket-client! "/chsk" csrf-token {:type :auto})]
  12.  
  13. (defonce chsk chsk)
  14. (defonce ch-chsk ch-recv) ; ChannelSocket's receive channel
  15. (defonce chsk-send! send-fn) ; ChannelSocket's send API fn
  16. (defonce chsk-state state) ; Watchable, read-only atom
  17. ))
  18.  
  19.  
  20.  
  21. (defmulti -event-msg-handler
  22. "Multimethod to handle Sente `event-msg`s"
  23. :id ; Dispatch on event-id
  24. )
  25.  
  26.  
  27. (defn event-msg-handler
  28. "Wraps `-event-msg-handler` with logging, error catching, etc."
  29. [{:as ev-msg :keys [id ?data event]}]
  30. (-event-msg-handler ev-msg))
  31.  
  32.  
  33. (defmethod -event-msg-handler
  34. :default ; Default/fallback case (no other matching handler)
  35. [{:as ev-msg :keys [event]}]
  36. (println "Unhandled event: %s" event))
  37.  
  38.  
  39. (defmethod -event-msg-handler :chsk/state
  40. [{:as ev-msg :keys [?data]}]
  41. (let [[old-state-map new-state-map] (encore/have vector? ?data)]
  42. (if (:first-open? new-state-map)
  43. (println "Channel socket successfully established!: %s" new-state-map)
  44. (println "Channel socket state change: %s" new-state-map))))
  45.  
  46.  
  47. (defmethod -event-msg-handler :chsk/recv
  48. [{:as ev-msg :keys [?data]}]
  49. (let [[event msg] ?data
  50. _ (println "EVENT >>: " event " msg: " msg)]
  51. (if (= event :chsk/ws-ping)
  52. (println "Keep Alive")
  53. (println "here comes eveeent: " event)
  54. ;; (rf/dispatch [event (:coords msg)])
  55. )))
  56.  
  57.  
  58. (defmethod -event-msg-handler :chsk/handshake
  59. [{:as ev-msg :keys [?data]}]
  60. (let [[?uid ?csrf-token ?handshake-data] ?data]
  61. (println "Handshake: %s" ?data)))
  62.  
  63.  
  64. (defn abc []
  65. (chsk-send! [:test/first {:data (str "abc!!")}]))
  66.  
  67.  
  68.  
  69. (defn start-ws []
  70. (start-websocket "KgR8xgDnI71Q9EPSL47o1BRiV+YkD++cgGLZpy61wxgEkPAcvH16k3SMeE2ubCeLHuhhfFNzFEuEsfMs")
  71. (sente/start-client-chsk-router! ch-chsk event-msg-handler))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement