Skip to content

Instantly share code, notes, and snippets.

@GeorgeJahad
Created October 28, 2009 20:01
Show Gist options
  • Save GeorgeJahad/220767 to your computer and use it in GitHub Desktop.
Save GeorgeJahad/220767 to your computer and use it in GitHub Desktop.
(ns gjahad.socket-repl
(:use clojure.main)
(:use clojure.contrib.server-socket)
(:import java.net.Socket)
(:import java.net.InetAddress)
(:import clojure.lang.LineNumberingPushbackReader)
(:import java.io.InputStreamReader)
(:import java.io.OutputStreamWriter))
(def *port* 4455)
(defn make-server[]
(def server (create-repl-server *port*)))
(defn run-command [host port command]
(let [s (Socket. host port)
in (.getInputStream s)
rdr (LineNumberingPushbackReader. (InputStreamReader. in))
wrtr (OutputStreamWriter. (.getOutputStream s))]
;; skip repl prompt
(read rdr)
(binding [*out* wrtr]
(println command))))
(defn start-client[host port]
(let [s (Socket. host port)
in (.getInputStream s)
rdr (LineNumberingPushbackReader. (InputStreamReader. in))
wrtr (OutputStreamWriter. (.getOutputStream s))]
(loop []
;; skip repl prompt
(read rdr)
(binding [*out* wrtr]
(println "(user/get-next-job)"))
(if-let [job (read rdr)]
(do
(eval job)
(recur))))))
(comment
; /usr/bin/java -Dclojure.compile.path=/home/gbj/incoming/sonian2/sa-safe/target/classes/ -classpath /home/gbj/incoming/sonian2/sa-safe/src/:/home/gbj/incoming/sonian2/sa-safe/target/dependency/:/home/gbj/incoming/sonian2/sa-safe/test/:/media/sdb2/gbj/files/ clojure.main --repl
(use 'gjahad.socket-repl)
(run-command "localhost" *port* '(do (in-ns 'user) (def a (+ 1 a))))
(def a (atom (map (fn [a] `(println "this is job " ~a)) (range 1 10000))))
(defn get-next-job [] (do (Thread/sleep 2000) (first (swap! a next))))
(defn get-next-job [] `(println (str "a+1 is" (+ 1 a))))
(defn get-next-job [] `(do (Thread/sleep 2000) (println (str "a+1 is " (+ 1 a)))))
(defn get-next-job []
'(Thread/sleep 2000))
(.close (first @(user/server :connections)))
;echo "(println \"a = \" user/a)
(.close (first @(user/server :connections)))" | nc localhost 4455
(load-file "/media/sdb2/gbj/files/gjahad/socket_repl.clj")
server-socket
telnet
prepl
run-command
start-client
anonymous macros
nc
caveats error handling/exceptions
job distribution
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment