sliva/src/sliva/server/handlers.clj

48 lines
1.8 KiB
Clojure
Raw Normal View History

2018-08-09 11:28:37 +02:00
(ns sliva.server.handlers
(:require [clojure.java.shell :refer [sh]]
[compojure.core :refer [defroutes GET]]
2018-08-09 11:28:37 +02:00
[compojure.route :refer [resources]]
[clojure.string :as str]
2018-08-10 18:29:18 +02:00
[clojure.core.async :refer [chan <! <!! >! put! close! go go-loop sliding-buffer]]
2018-08-09 11:28:37 +02:00
[ring.util.response :refer [resource-response]]
[ring.middleware.reload :refer [wrap-reload]]
[chord.http-kit :refer [with-channel]]))
(def clients (atom {}))
2018-08-10 18:29:18 +02:00
(defn send-all [cmd args]
2018-08-09 11:28:37 +02:00
(doseq [conn @clients]
2018-08-10 18:29:18 +02:00
;;(println "sending" cmd (str/join ":" args))
(put! (val conn)
(str cmd ":" (str/join ":" args)))))
2018-08-09 11:28:37 +02:00
(defn socket-handler [request]
(let [cid (java.util.UUID/randomUUID)]
(with-channel request ws-ch
2018-08-10 18:29:18 +02:00
{:read-ch (chan (sliding-buffer 100))
:write-ch (chan (sliding-buffer 100))}
2018-08-09 11:28:37 +02:00
(go
(let [{:keys [message]} (<! ws-ch)]
(println "new connection - " cid)
(>! ws-ch (str "hello:" cid))
2018-08-09 11:28:37 +02:00
(swap! clients assoc cid ws-ch)
2018-08-10 18:29:18 +02:00
(send-all "open" [cid])
2018-08-09 11:28:37 +02:00
(go-loop []
(let [{:keys [message]} (<! ws-ch)]
(let [[cmd & args] (str/split message #":")]
2018-08-11 01:36:47 +02:00
;;(println "command" cmd args)
2018-08-09 11:28:37 +02:00
(condp = cmd
"ping" (>! ws-ch "pong")
2018-08-10 21:45:24 +02:00
"motion" (send-all "displace" args)
"rotation" (send-all "spin" args)
2018-08-11 03:00:13 +02:00
"vizual-reset" (send-all "vizual-reset" [])
"vizual-update" (send-all "vizual-update" args)
2018-08-10 18:29:18 +02:00
(println "DEBUG: msg ignored: " cmd)))
2018-08-09 11:28:37 +02:00
(recur))))))))
;;(close! ws-ch)))))
;;test
;;(while true
;; (let [return (sh "sudo" "bash" "-c" "iwlist scan | grep ESSID | sed 's/[[:space:]]\\+ESSID://' | sed 's/\"//g' | uniq")]
;; (println "GOT NETWORKS!" (:out return)))