43 lines
1.6 KiB
Clojure
43 lines
1.6 KiB
Clojure
(ns sliva.server.handlers
|
|
(:require [clojure.java.shell :refer [sh]]
|
|
[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)]
|
|
(println "new connection - " cid)
|
|
(>! ws-ch (str "hello:" cid))
|
|
(swap! clients assoc cid ws-ch)
|
|
(send-all "open" cid)
|
|
(go-loop []
|
|
(let [{:keys [message]} (<! ws-ch)]
|
|
(println "GOT MSG!" message)
|
|
(let [[cmd & args] (str/split message #":")]
|
|
(println "command" cmd "(" args ")")
|
|
(condp = cmd
|
|
"ping" (>! ws-ch "pong")
|
|
(println "DEBUG: msg ignored: " cmd))) (keys @clients)
|
|
(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)))
|