-
Notifications
You must be signed in to change notification settings - Fork 0
WebSocket Examples
Brandon Correa edited this page May 17, 2024
·
1 revision
(ns acme.mimic
(:require [c3kit.wire.js :as wjs]))
(def connected? (atom false))
(def messages (atom []))
(defn connect! []
(let [ws (js/WebSocket. "ws://localhost:8080")]
(wjs/add-listener ws "open" #(reset! connected? true))
(wjs/add-listener ws "close" #(reset! connected? false))
(wjs/add-listener ws "message" #(swap! messages conj (wjs/o-get % "data")))))
(ns acme.mimic-spec
(:require [acme.mimic :as sut]
[bwa.mimic.server :as server]
[bwa.mimic.spec-helper :as mimic-helper]
[c3kit.wire.js :as wjs]
[speclj.core :refer-macros [describe it should= should-not should-be should]]))
(describe "Mimic"
(mimic-helper/with-memory-websockets)
(it "listens for messages"
(should-be empty? (server/connections))
(sut/connect!)
(let [[ws :as connections] (server/connections)]
(should= 1 (count connections))
(should= "ws://localhost:8080/" (wjs/o-get ws "url"))
(should-not @sut/connected?)
(server/open ws)
(should @sut/connected?)
(server/send ws "first payload")
(should= ["first payload"] @sut/messages)
(server/send ws "second payload")
(should= ["first payload" "second payload"] @sut/messages)
(server/close ws)
(should-not @sut/connected?)))
)
(ns acme.main
(:require [bwa.mimic.memory-server :as mem-server]
[bwa.mimic.memory-websocket :as mem-ws]
[bwa.mimic.server :as server]))
(defn -main []
; redefine the WebSocket constructor
(set! js/WebSocket mem-ws/->MemSocket)
; set your browser's repl options
(set! js/Server server/repl-options)
; Configure your server implementation
(reset! server/impl (mem-server/->MemServer))
)