Poll for repl startup.
Still some prompt I/O wackiness with evaling long-running forms.
This commit is contained in:
parent
f7cf22c010
commit
18d5290f93
1 changed files with 21 additions and 15 deletions
|
@ -27,22 +27,28 @@
|
||||||
(clojure.main/repl ~@init-form))
|
(clojure.main/repl ~@init-form))
|
||||||
(.close server#)))))
|
(.close server#)))))
|
||||||
|
|
||||||
(defn connect-to-repl [port]
|
(defn copy-out [reader]
|
||||||
(Thread/sleep 3000) ;; TODO: poll
|
(Thread/sleep 100)
|
||||||
(let [socket (Socket. "localhost" port)
|
(.write *out* (.read reader))
|
||||||
reader (InputStreamReader. (.getInputStream socket))
|
(while (.ready reader)
|
||||||
writer (OutputStreamWriter. (.getOutputStream socket))
|
(.write *out* (.read reader)))
|
||||||
copy-out #(do (while (.ready reader)
|
(flush))
|
||||||
(Thread/sleep 100)
|
|
||||||
(.write *out* (.read reader)))
|
(defn- connect-to-repl [reader writer]
|
||||||
(flush))]
|
(copy-out reader)
|
||||||
(loop []
|
(.write writer (str (pr-str (read)) "\n"))
|
||||||
(dotimes [_ 2] (copy-out))
|
(.flush writer)
|
||||||
(.write writer (str (pr-str (read)) "\n"))
|
(recur reader writer))
|
||||||
(.flush writer)
|
|
||||||
(recur))))
|
(defn- poll-for-socket [port]
|
||||||
|
(Thread/sleep 100)
|
||||||
|
(try (let [socket (Socket. "localhost" port)]
|
||||||
|
(connect-to-repl (InputStreamReader. (.getInputStream socket))
|
||||||
|
(OutputStreamWriter. (.getOutputStream socket))))
|
||||||
|
(catch java.net.ConnectException _))
|
||||||
|
(recur port))
|
||||||
|
|
||||||
(defn repl [project]
|
(defn repl [project]
|
||||||
(let [port (+ 1024 (rand-int 32000))]
|
(let [port (+ 1024 (rand-int 32000))]
|
||||||
(.start (Thread. #(eval-in-project project (repl-form project port))))
|
(.start (Thread. #(eval-in-project project (repl-form project port))))
|
||||||
(connect-to-repl port)))
|
(poll-for-socket port)))
|
||||||
|
|
Loading…
Reference in a new issue