aboutsummaryrefslogtreecommitdiff
path: root/flow-samples/terminal/src/main/scala/com/github/jodersky/flow/samples/terminal/Terminal.scala
diff options
context:
space:
mode:
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.scala58
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
+
+}