Created
October 28, 2009 20:01
-
-
Save GeorgeJahad/220767 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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