sliva/src/sliva/socket.cljs

45 lines
1.5 KiB
Plaintext
Raw Normal View History

2018-08-09 11:28:37 +02:00
(ns sliva.socket
(:require [chord.client :refer [ws-ch]]
[clojure.string :as str]
2018-08-09 11:28:37 +02:00
[cljs.core.async :refer [<! >! put! close!]]
2018-08-10 18:29:18 +02:00
[sliva.data :refer [appstate]]
2018-08-11 03:00:13 +02:00
[sliva.gfx :refer [spin-objects displace-objects vizual-reset vizual-update]])
2018-08-09 11:28:37 +02:00
(:require-macros [cljs.core.async.macros :refer [go go-loop]]))
(defn handle-message [msg-str]
(let [[msg & args] (str/split msg-str #":")]
2018-08-10 18:29:18 +02:00
;;(console.info "msg" msg "args" args)
(condp = msg
"pong" (console.log "hura, server se odziva")
"open" (swap! appstate assoc :clients (conj (:clients @appstate) (first args)))
2018-08-10 18:29:18 +02:00
"spin" (spin-objects args)
2018-08-10 21:45:24 +02:00
"displace" (displace-objects args)
2018-08-11 03:00:13 +02:00
"vizual-reset" (vizual-reset)
"vizual-update" (vizual-update args)
(console.info "msg ingored: " msg))))
2018-08-09 11:28:37 +02:00
2018-08-10 18:29:18 +02:00
(defn send-message [& message]
(let [vtic (:vtic @appstate)]
(put! vtic (str/join ":" message))))
2018-08-09 11:28:37 +02:00
(defn websocket-init []
(console.log "init webscoket")
(go (let [host (aget js/window "location" "hostname")
{:keys [ws-channel error]} (<! (ws-ch (str "ws://" host ":3449/ws")))]
2018-08-09 11:28:37 +02:00
(if-not error
(do
(swap! appstate assoc :vtic ws-channel)
(>! ws-channel "hello:server")
2018-08-09 11:28:37 +02:00
(go-loop []
(let [{:keys [message]} (<! ws-channel)]
(handle-message message)
(recur))))
2018-08-09 11:28:37 +02:00
(js/console.log "Fejl websocket: " (pr-str error))))))
(defn click-test []
(.addEventListener
js/window
"click"
2018-08-10 18:29:18 +02:00
#(send-message "ping")))