(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 (str "hello:" cid)) (swap! clients assoc cid ws-ch) (send-all "open" cid) (go-loop [] (let [{:keys [message]} (! 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)))