|
12 | 12 |
|
13 | 13 | (def ^{:dynamic true} *ltmsg* nil) |
14 | 14 | (def server (atom nil)) |
15 | | -(def clients (atom [])) |
| 15 | +(def clients (atom {})) |
16 | 16 | (def old-out System/out) |
| 17 | +(def old-err System/err) |
| 18 | +(def old-*out* *out*) |
| 19 | +(def old-*err* *err*) |
17 | 20 | (def my-settings (atom {:name "clj" |
18 | 21 | :dir (fs/absolute-path fs/*cwd*) |
19 | 22 | :type "lein-light-nrepl" |
|
63 | 66 | (transport/send (:transport msg) (response-for msg {:op (name op) :id (or (:id msg) (:client-id @my-settings)) :encoding encoding :data data})))))) |
64 | 67 |
|
65 | 68 | (defn broadcast [op data] |
66 | | - (doseq [client @clients] |
| 69 | + (doseq [client (vals @clients)] |
67 | 70 | (respond client op data))) |
68 | 71 |
|
69 | 72 | (defn broadcast-to [id op data] |
70 | | - (doseq [client @clients] |
| 73 | + (doseq [client (vals @clients)] |
71 | 74 | (respond (assoc client :id id) op data))) |
72 | 75 |
|
73 | 76 | (defn safe-respond-to [id op data] |
|
76 | 79 | (broadcast-to id op data))) |
77 | 80 |
|
78 | 81 | (defn capture-client [msg] |
79 | | - (swap! clients conj (select-keys msg [:session :transport]))) |
| 82 | + (swap! clients assoc (-> msg :session meta :id) (select-keys msg [:session :transport]))) |
| 83 | + |
| 84 | +(defn remove-client [msg] |
| 85 | + (swap! clients dissoc (-> msg :session meta :id))) |
80 | 86 |
|
81 | 87 | (defn queued [{:keys [op session id transport] :as msg} executor] |
82 | 88 | (queue-eval session executor |
|
152 | 158 | (alter-var-root #'*err* (fn [_] err)) |
153 | 159 | )) |
154 | 160 |
|
| 161 | +(defn restore-io [] |
| 162 | + (System/setOut old-out) |
| 163 | + (System/setErr old-err) |
| 164 | + (alter-var-root #'*out* (fn [_] old-*out*)) |
| 165 | + (alter-var-root #'*err* (fn [_] old-*err*))) |
| 166 | + |
155 | 167 | (defn start [info] |
156 | 168 | ;(reset! server (start-server :port 7888 :handler (default-handler #'lighttable-ops))) |
157 | 169 | ) |
|
0 commit comments