/* * @author Stephane Micheloud */ import java.io._ import scala.compat.Platform.currentTime import scala.remoting.Debug, Debug._ trait ServerConsole extends Thread { private val startTime = currentTime start() private var isTerminated = false def terminate() { isTerminated = true } protected def loop(block: => Unit) { while (!isTerminated) { try { block } catch { case e: ObjectStreamException => trace("Object stream error ("+e.getMessage+")") case e: EOFException => trace("Connection lost") case e: ClassNotFoundException => trace("Class not found") case e => trace("Server error: "+e) } } } 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] = { print("> ") 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" }