diff options
Diffstat (limited to 'flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala')
-rw-r--r-- | flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala | 58 |
1 files changed, 21 insertions, 37 deletions
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 + +} |