diff options
author | michelou <michelou@epfl.ch> | 2010-11-17 12:26:13 +0000 |
---|---|---|
committer | michelou <michelou@epfl.ch> | 2010-11-17 12:26:13 +0000 |
commit | c09f6173e96ec741c9b38edfee969ae8c6b74d4e (patch) | |
tree | 1f06579f72afa12092acd0b5bbb7c678291cf619 /test/files/detach-run/actor/ServerConsole.scala | |
parent | 363a1456f671323b35dcacf2c8b8eb39180b8a53 (diff) | |
download | scala-c09f6173e96ec741c9b38edfee969ae8c6b74d4e.tar.gz scala-c09f6173e96ec741c9b38edfee969ae8c6b74d4e.tar.bz2 scala-c09f6173e96ec741c9b38edfee969ae8c6b74d4e.zip |
updates Scala examples, added detach plugin
Diffstat (limited to 'test/files/detach-run/actor/ServerConsole.scala')
-rw-r--r-- | test/files/detach-run/actor/ServerConsole.scala | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/test/files/detach-run/actor/ServerConsole.scala b/test/files/detach-run/actor/ServerConsole.scala new file mode 100644 index 0000000000..f68274e927 --- /dev/null +++ b/test/files/detach-run/actor/ServerConsole.scala @@ -0,0 +1,71 @@ +import java.io._ + +import scala.compat.Platform.currentTime +import scala.remoting.Debug, Debug._ + +trait ServerConsole extends Thread { + private val startTime = currentTime + actors.Debug.level = // e.g. 3 // info+warning+error + try { System.getProperty("scala.actors.logLevel", "0").toInt } + catch { case e => 0 } + + start() + + val serverClassLoader = { + import java.rmi.server.RMIClassLoader + val codebase = System.getProperty("java.rmi.server.codebase") + info("[ServerConsole] codebase="+codebase) + RMIClassLoader.getClassLoader(codebase) + } + + private var isTerminated = false + + def terminate() { isTerminated = false } + + def isRunning = !isTerminated + + override def run() { + val in = new BufferedReader(new InputStreamReader(System.in)) + var quit = false + while (!quit) { + val args = getArgs(in) + if (args contains "quit") + quit = true + if (args contains "cls") { + println(ERASE_SCREEN) + println(CURSOR_HOME) + } + if (args contains "warning") + Debug.level = Level.WARNING + if (args contains "info") + Debug.level = Level.INFO + if (args contains "silent") + Debug.level = Level.SILENT + } + terminate() + println("Server exited ("+mkTimeString(currentTime - startTime)+")") + exit(0) + } + + protected def trace(msg: String) { + Debug.info("[ServerConsole.trace] "+msg) + } + + private def getArgs(in: BufferedReader): List[String] = { + val input = try { in.readLine() } catch { case _ => null } + if (input != null) (input.trim split "\\s+").toList else Nil + } + + private def mkTimeString(time: Long): String = { + def twoDigits(i: Long) = (if (i < 10) "0" else "")+i + val sec = time / 1000 + val min = sec / 60 + val h = min / 60 + twoDigits(h) +":"+ + twoDigits(min - h * 60)+":"+ + twoDigits(sec - min * 60) + } + + private val ERASE_SCREEN = "\033[2J" + private val CURSOR_HOME = "\033[H" +} |