Clojure websockify: -main and command line args.

Can now be launched like so:

lein run websockify --web ../../noVNC/ 6080 localhost:5901
This commit is contained in:
Joel Martin 2012-01-30 13:38:18 -06:00
parent f2f838f7e2
commit 2c053f349c
2 changed files with 34 additions and 9 deletions

View File

@ -1,11 +1,13 @@
(defproject websockify "1.0.0-SNAPSHOT"
:description "Websockify"
:description "Clojure implementation of Websockify"
:url "https://github.com/kanaka/websockify"
:dependencies [[org.clojure/clojure "1.2.1"]
[org.clojure/tools.cli "0.2.1"]
[ring/ring-jetty-adapter "1.0.0-beta2"]
[org.eclipse.jetty/jetty-websocket "7.5.4.v20111024"]
[org.eclipse.jetty/jetty-server "7.5.4.v20111024"]
[org.eclipse.jetty/jetty-servlet "7.5.4.v20111024"]
[org.jboss.netty/netty "3.2.5.Final"]
]
; :dev-dependencies [[swank-clojure "1.3.0-SNAPSHOT"]]
[org.jboss.netty/netty "3.2.5.Final"]]
;:dev-dependencies [[swank-clojure "1.3.0-SNAPSHOT"]]
:main websockify
)

View File

@ -1,5 +1,7 @@
(ns websockify
(:use ring.adapter.jetty)
;(:use ring.adapter.jetty)
(:require [clojure.tools.cli :as cli]
[clojure.string :as string])
(:import
@ -20,8 +22,8 @@
[org.eclipse.jetty.servlet
ServletContextHandler ServletHolder DefaultServlet]
[org.eclipse.jetty.websocket
WebSocket WebSocketClientFactory WebSocketClient
WebSocketServlet]))
WebSocket WebSocket$OnTextMessage
WebSocketClientFactory WebSocketClient WebSocketServlet]))
;; TCP / NIO
@ -69,7 +71,7 @@
;; http://wiki.eclipse.org/Jetty/Feature/WebSockets
(defn make-websocket-servlet [open close message]
(proxy [org.eclipse.jetty.websocket.WebSocketServlet] []
(proxy [WebSocketServlet] []
(doGet [request response]
;;(println "doGet" request)
(.. (proxy-super getServletContext)
@ -77,7 +79,7 @@
(forward request response)))
(doWebSocketConnect [request response]
(println "doWebSocketConnect")
(reify org.eclipse.jetty.websocket.WebSocket$OnTextMessage
(reify WebSocket$OnTextMessage
(onOpen [this connection] (open this connection))
(onClose [this code message] (close this code message))
(onMessage [this data] (message this data))))))
@ -208,3 +210,24 @@
(reset! targets {})
nil)))
(defn -main [& args]
(let [[options args banner]
(cli/cli
args
["-v" "--[no-]verbose" "Verbose output"]
["--web" "Run webserver with root at given location"]
["-h" "--help" "Show help" :default false :flag true]
)]
(when (or (:help options)
(not= 2 (count args)))
(println banner)
(System/exit 0))
(println options)
(println args)
(let [target (second args)
[target-host target-port] (string/split target #":")]
(start-websockify :listen-port (Integer/parseInt (first args))
:target-host target-host
:target-port (Integer/parseInt target-port)
:web (:web options))))
nil)