(ns sliva.server.handlers (:require [compojure.core :refer [defroutes GET]] [compojure.route :refer [resources]] [clojure.string :as str] [clojure.core.async :refer [chan ! put! close! go go-loop]] [ring.util.response :refer [resource-response]] [ring.middleware.reload :refer [wrap-reload]] [chord.http-kit :refer [with-channel]])) (def clients (atom {})) (defn send-all [& args] (println "sending to all" args (keys @clients)) (doseq [conn @clients] (println "sending" args) (put! (val conn) (str/join ":" args)))) (defn socket-handler [request] (let [cid (java.util.UUID/randomUUID)] (with-channel request ws-ch (go (let [{:keys [message]} (! ws-ch (str "Hello " cid)) (swap! clients assoc cid ws-ch) (send-all "open" cid) (go-loop [] (let [{:keys [message]} (! ws-ch "pong") "Unknown command :/")) (keys @clients) (recur)))))))) ;;(close! ws-ch)))))