Better heuristic for when to close the socket in interactive tasks.
This commit is contained in:
parent
9eecaf3fa0
commit
02fd437669
2 changed files with 10 additions and 10 deletions
|
@ -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)
|
||||
(Thread/sleep 100)
|
||||
(recur reader writer buffer eof))))
|
||||
(when-not (.isClosed socket)
|
||||
(Thread/sleep 100)
|
||||
(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)
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Reference in a new issue