sliva/src/sliva/server.clj

37 lines
1.3 KiB
Clojure

(ns sliva.server
(:require [compojure.core :refer [defroutes GET]]
[compojure.route :refer [resources]]
[ring.util.response :refer [resource-response]]
[ring.middleware.reload :refer [wrap-reload]]
[chord.http-kit :refer [with-channel]]
[org.httpkit.server :refer [run-server]]
[clojure.core.async :refer [chan <! >! put! close! go go-loop]]
[clojure.core :refer [string]]))
(defn socket-handler [request]
(let [cid (java.util.UUID/randomUUID)]
(with-channel request ws-ch
(go
(let [{:keys [message]} (<! ws-ch)]
(println "new connection - " cid)
(>! ws-ch (str "Hello " cid))
(go-loop []
(let [{:keys [message]} (<! ws-ch)]
(let [[cmd & args] (split message #":")]
(condp = cmd
"ping" (>! ws-ch "pong")
"echo" (>! ws-ch (str "pong" args))
(println "Dunno what to do with command " cmd)))
(recur))))))))
;;(close! ws-ch)))))
(defroutes routes
(GET "/" [] (resource-response "index.html" {:root "public"}))
(GET "/hello" [] "wat")
(GET "/ws" [] socket-handler)
(resources "/"))
(def handler (-> #'routes
wrap-reload))