(ns frontend.db.rtc.mock (:require [spy.core :as spy] [frontend.db.rtc.const :as rtc-const] [clojure.core.async :as async :refer [ s js/JSON.parse (js->clj :keywordize-keys true) rtc-const/data-to-ws-decoder)] (prn :got-ws-msg msg) (async/put! onmessage msg))) (set-push-data-fn [_ f] (set! push-data-fn f))) (defn default-push-data-fn [msg push-data-chan] (case (:action msg) "register-graph-updates" (async/offer! push-data-chan (select-keys msg [:req-id])) ;; default nil)) (defn mock-websocket [data-from-ws-chan] (let [stop-push-data-loop-ch (async/chan) ws (->Mock-WebSocket nil (async/chan 10) nil nil js/WebSocket.OPEN data-from-ws-chan default-push-data-fn)] (async/go-loop [] (let [{:keys [stop msg]} (async/alt! stop-push-data-loop-ch {:stop true} (.-onmessage ws) ([msg] {:msg msg}))] (cond (or stop (nil? msg)) (do (prn :mock-ws-loop-stop) nil) msg (do (when-let [push-data-fn (.-push-data-fn ws)] (push-data-fn msg (.-push-data-chan ws))) (recur))))) ws)) (defn mock-ws-push-data-fn [ws f] (.set-push-data-fn ws f))