diff options
Diffstat (limited to 'flow-samples')
3 files changed, 31 insertions, 48 deletions
diff --git a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/ConsoleReader.scala b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/ConsoleReader.scala index 8eb1f15..68a79db 100644 --- a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/ConsoleReader.scala +++ b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/ConsoleReader.scala @@ -1,7 +1,8 @@ -package com.github.jodersky.flow.samples.terminal +package com.github.jodersky.flow +package samples.terminal import akka.actor.Actor -import akka.actor.actorRef2Scala +import scala.io.StdIn class ConsoleReader extends Actor { import context._ @@ -9,7 +10,7 @@ class ConsoleReader extends Actor { def receive = { case Read => - Console.readLine() match { + StdIn.readLine() match { case ":q" | null => parent ! EOT case s => { parent ! ConsoleInput(s) @@ -25,4 +26,4 @@ object ConsoleReader { case object EOT case class ConsoleInput(in: String) -}
\ No newline at end of file +} diff --git a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Main.scala b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Main.scala index 5b17265..1447b78 100644 --- a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Main.scala +++ b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Main.scala @@ -1,17 +1,15 @@ package com.github.jodersky.flow package samples.terminal -import com.github.jodersky.flow.Parity -import com.github.jodersky.flow.SerialSettings -import com.github.jodersky.flow.internal.SerialConnection - import akka.actor.ActorSystem +import internal.SerialConnection +import scala.io.StdIn object Main { - + def ask(label: String, default: String) = { print(label + " [" + default.toString + "]: ") - val in = Console.readLine() + val in = StdIn.readLine() println("") if (in.isEmpty) default else in } @@ -30,4 +28,4 @@ object Main { val terminal = system.actorOf(Terminal(port, settings), name = "terminal") system.registerOnTermination(println("Stopped terminal system.")) } -}
\ No newline at end of file +} diff --git a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala index cf75d98..82f6b4f 100644 --- a/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala +++ b/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala @@ -1,21 +1,7 @@ -package com.github.jodersky.flow.samples.terminal - -import com.github.jodersky.flow.Serial -import com.github.jodersky.flow.Serial.Close -import com.github.jodersky.flow.Serial.Closed -import com.github.jodersky.flow.Serial.CommandFailed -import com.github.jodersky.flow.Serial.Event -import com.github.jodersky.flow.Serial.Opened -import com.github.jodersky.flow.Serial.Received -import com.github.jodersky.flow.Serial.Write -import com.github.jodersky.flow.SerialSettings - -import akka.actor.Actor -import akka.actor.ActorLogging -import akka.actor.ActorRef -import akka.actor.Props -import akka.actor.Terminated -import akka.actor.actorRef2Scala +package com.github.jodersky.flow +package samples.terminal + +import akka.actor.{ Actor, ActorLogging, ActorRef, Props, Terminated, actorRef2Scala } import akka.io.IO import akka.util.ByteString @@ -24,20 +10,20 @@ class Terminal(port: String, settings: SerialSettings) extends Actor with ActorL import context._ val reader = actorOf(Props[ConsoleReader]) - + log.info(s"Requesting manager to open port: ${port}, baud: ${settings.baud}") IO(Serial) ! Serial.Open(port, settings) - + override def postStop() = { system.shutdown() } def receive = { - case CommandFailed(cmd, reason) => { + case Serial.CommandFailed(cmd, reason) => { log.error(s"Connection failed, stopping terminal. Reason: ${reason}") context stop self } - case Opened(port) => { + case Serial.Opened(port) => { log.info(s"Port ${port} is now open.") val operator = sender context become opened(operator) @@ -47,19 +33,19 @@ class Terminal(port: String, settings: SerialSettings) extends Actor with ActorL } def opened(operator: ActorRef): Receive = { - - case Received(data) => { + + case Serial.Received(data) => { log.info(s"Received data: ${formatData(data)}") } - - case Wrote(data) => log.info(s"Wrote data: ${formatData(data)}") - case Closed => { + case Terminal.Wrote(data) => log.info(s"Wrote data: ${formatData(data)}") + + case Serial.Closed => { log.info("Operator closed normally, exiting terminal.") context unwatch operator context stop self } - + case Terminated(`operator`) => { log.error("Operator crashed, exiting terminal.") context stop self @@ -67,25 +53,23 @@ class Terminal(port: String, settings: SerialSettings) extends Actor with ActorL case ConsoleReader.EOT => { log.info("Initiating close.") - operator ! Close + operator ! Serial.Close } case ConsoleReader.ConsoleInput(input) => { val data = ByteString(input.getBytes) - operator ! Write(data, length => Wrote(data.take(length))) + operator ! Serial.Write(data, length => Wrote(data.take(length))) reader ! ConsoleReader.Read } } - - } object Terminal { - case class Wrote(data: ByteString) extends Event - + case class Wrote(data: ByteString) extends Serial.Event + def apply(port: String, settings: SerialSettings) = Props(classOf[Terminal], port, settings) - + private def formatData(data: ByteString) = data.mkString("[", ",", "]") + " " + (new String(data.toArray, "UTF-8")) - -}
\ No newline at end of file + +} |