Skip to content

Instantly share code, notes, and snippets.

@scotthaleen
Created August 24, 2018 16:36
Show Gist options
  • Select an option

  • Save scotthaleen/4f88b16d34d9f95e6bcf51559e03d551 to your computer and use it in GitHub Desktop.

Select an option

Save scotthaleen/4f88b16d34d9f95e6bcf51559e03d551 to your computer and use it in GitHub Desktop.
Send form(s) to clojure socket repl
;;; https://clojure.org/reference/repl_and_main#_launching_a_socket_server
;;; -Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}"
(defmacro send-forms [host port form & forms]
`(with-open [socket# (java.net.Socket. ~host ~port)]
(let [pw# (java.io.PrintWriter. (.getOutputStream socket#) true)
in# (java.io.BufferedReader. (java.io.InputStreamReader. (.getInputStream socket#)))
forms# (list ~(str form) ~@(map str forms))]
(reduce
(fn [acc# f#]
(.println pw# f#)
(conj acc# (clojure.string/replace-first (.readLine in#) "user=> " "")))
[]
forms#))))
;;=> (send-forms "localhost" 5555
;; (defn double [x] (+ x x))
;; (double 10))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment