Better heuristic for when to close the socket in interactive tasks.

This commit is contained in:
Phil Hagelberg 2010-11-20 17:04:59 -08:00
parent 9eecaf3fa0
commit 02fd437669
2 changed files with 10 additions and 10 deletions

View file

@ -10,21 +10,21 @@
(defn not-found [& _]
(println "That's not a task. Use help to list all tasks."))
(defn- eval-client-loop [reader writer buffer eof]
(defn- eval-client-loop [reader writer buffer socket]
(let [len (.read reader buffer)
output (String. buffer)]
(when-not (or (neg? len) (re-find (re-pattern eof) output))
(when-not (neg? len)
(.write *out* buffer 0 len)
(flush)
(when-not (.isClosed socket)
(Thread/sleep 100)
(recur reader writer buffer eof))))
(recur reader writer buffer socket)))))
(defn eval-in-repl [connect project form & [args]]
(let [[reader writer] (connect)
eof (str (java.util.UUID/randomUUID))]
(.write writer (format "%s\n:%s\n" (pr-str form) eof))
(let [[reader writer socket] (connect)]
(.write writer (str (pr-str form) "\n" '(.close *in*) "\n"))
(.flush writer)
(try (eval-client-loop reader writer (make-array Character/TYPE 1000) eof)
(try (eval-client-loop reader writer (make-array Character/TYPE 100) socket)
0
(catch Exception e
(.printStackTrace e) 1)

View file

@ -62,7 +62,7 @@
(Thread/sleep 100)
(recur))))
(defn repl-client [reader writer]
(defn repl-client [reader writer & [socket]]
(.start (Thread. #(copy-out-loop reader)))
(loop [reader reader, writer writer]
(let [input (read-line)]
@ -74,7 +74,7 @@
(defn- connect-to-server [socket handler]
(let [reader (InputStreamReader. (.getInputStream socket))
writer (OutputStreamWriter. (.getOutputStream socket))]
(handler reader writer)))
(handler reader writer socket)))
(defn poll-repl-connection
([port retries handler]