mock.cljs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. (ns frontend.db.rtc.mock
  2. (:require [clojure.core.async :as async]
  3. [frontend.db.rtc.const :as rtc-const]
  4. [spy.core :as spy]))
  5. ;;; websocket
  6. (defrecord Mock-WebSocket [onopen onmessage onclose onerror readyState push-data-chan ^:mutable push-data-fn]
  7. Object
  8. (close [_]
  9. (prn :mock-ws :closed)
  10. (when (fn? onclose) (onclose)))
  11. (send [_ s]
  12. (let [msg (-> s
  13. js/JSON.parse
  14. (js->clj :keywordize-keys true)
  15. rtc-const/data-to-ws-decoder)]
  16. (async/put! onmessage msg)))
  17. (set-push-data-fn [_ f]
  18. (set! push-data-fn f)))
  19. (defn default-push-data-fn
  20. [msg push-data-chan]
  21. (case (:action msg)
  22. "register-graph-updates"
  23. (async/offer! push-data-chan (select-keys msg [:req-id]))
  24. ;; default
  25. nil))
  26. (defn mock-websocket
  27. [data-from-ws-chan]
  28. (let [stop-push-data-loop-ch (async/chan)
  29. ws (->Mock-WebSocket nil (async/chan 10) nil nil 1
  30. data-from-ws-chan (spy/spy default-push-data-fn))]
  31. (async/go-loop []
  32. (let [{:keys [stop msg]}
  33. (async/alt!
  34. stop-push-data-loop-ch {:stop true}
  35. (.-onmessage ws) ([msg] {:msg msg}))]
  36. (cond
  37. (or stop (nil? msg))
  38. (do (prn :mock-ws-loop-stop) nil)
  39. msg
  40. (do (when-let [push-data-fn (:push-data-fn ws)]
  41. (push-data-fn msg (:push-data-chan ws)))
  42. (recur)))))
  43. ws))
  44. ;; (defn mock-ws-push-data-fn
  45. ;; [ws f]
  46. ;; (.set-push-data-fn ws f))
  47. ;;; websocket ends ;;;;
  48. ;;; frontend.db.rtc.op mock
  49. ;; (def *ops-store (atom {}))
  50. ;; (defn <get-ops&local-tx
  51. ;; [repo]
  52. ;; )
  53. ;;; frontend.db.rtc.op mock ends