summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/util/SocketServer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-06-06 12:10:18 +0000
committerMartin Odersky <odersky@gmail.com>2006-06-06 12:10:18 +0000
commit3be616edcfa5beaa3fd8fc632f25b340c578bbdc (patch)
treeb43fbb2280a0b3876aa679e2e816537734af9e60 /src/compiler/scala/tools/util/SocketServer.scala
parent31adfc6cf4b34273a4283765dd1f865670bf9c10 (diff)
downloadscala-3be616edcfa5beaa3fd8fc632f25b340c578bbdc.tar.gz
scala-3be616edcfa5beaa3fd8fc632f25b340c578bbdc.tar.bz2
scala-3be616edcfa5beaa3fd8fc632f25b340c578bbdc.zip
added scala compile server
Diffstat (limited to 'src/compiler/scala/tools/util/SocketServer.scala')
-rwxr-xr-xsrc/compiler/scala/tools/util/SocketServer.scala54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/util/SocketServer.scala b/src/compiler/scala/tools/util/SocketServer.scala
new file mode 100755
index 0000000000..7a65290dcc
--- /dev/null
+++ b/src/compiler/scala/tools/util/SocketServer.scala
@@ -0,0 +1,54 @@
+package scala.tools.util
+
+import java.net._
+import java.io._
+
+abstract class SocketServer {
+
+ def shutDown: boolean
+ def session(): unit
+
+ var out: PrintWriter = _
+ var in: BufferedReader = _
+
+ val port: int = try {
+ val s = new ServerSocket(0)
+ val p = s.getLocalPort()
+ s.close()
+ p
+ } catch {
+ case e: IOException =>
+ System.err.println("Could not listen on any port; exiting.")
+ exit(1)
+ }
+
+ def run(): unit = {
+ while (!shutDown) {
+ val serverSocket = try {
+ new ServerSocket(port)
+ } catch {
+ case e: IOException =>
+ System.err.println("Could not listen on port: "+port+"; exiting.")
+ exit(1)
+ }
+ val clientSocket = try {
+ serverSocket.accept()
+ } catch {
+ case e: IOException =>
+ System.err.println("Accept on port "+port+" failed; exiting.")
+ exit(1)
+ }
+
+ out = new PrintWriter(clientSocket.getOutputStream(), true)
+ in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))
+
+ session()
+
+ out.close()
+ in.close()
+ clientSocket.close()
+ serverSocket.close()
+ }
+ }
+}
+