aboutsummaryrefslogtreecommitdiff
path: root/samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala
diff options
context:
space:
mode:
Diffstat (limited to 'samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala')
-rw-r--r--samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala46
1 files changed, 25 insertions, 21 deletions
diff --git a/samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala b/samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala
index d228cb9..2f7dfc3 100644
--- a/samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala
+++ b/samples/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala
@@ -1,36 +1,40 @@
package com.github.jodersky.flow.example
import com.github.jodersky.flow.Serial._
-import com.github.jodersky.flow.low.{Serial => LowSerial}
+import com.github.jodersky.flow.low.{ Serial => LowSerial }
import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.ActorRef
import akka.util.ByteString
+import akka.io.IO
+import com.github.jodersky.flow.Serial
-class SerialHandler extends Actor with ActorLogging {
- var operator: Option[ActorRef] = None
+
+class SerialHandler(port: String, baud: Int) extends Actor with ActorLogging {
+ import context._
+
+ println(s"Requesting port open: ${port}, baud: ${baud}")
+ IO(Serial) ! Serial.Open(self, port, baud)
+
def receive = {
- case Opened(operator) => this.operator = Some(operator)
-
- case CommandFailed(cmd, reason) =>
- println(s"command ${cmd} failed, reason: ${reason}")
-
- case Received(data) => println("received data: " + formatData(data))
-
- case Close =>
- operator.map(_ ! Close)
-
- case Closed(_) => println("port closed")
-
- case Write(data) => {
- operator.map(_ ! Write(data))
+ case CommandFailed(_: Open, reason) => {
+ println(s"connection failed, reason: ${reason}")
+ context stop self
}
-
- case Wrote(data) => println("wrote data: " + formatData(data))
-
+
+ case Opened(operator) =>
+ println("Port opened.")
+ context become {
+ case Received(data) => println("received data: " + formatData(data))
+ case Wrote(data) => println("wrote ACK: " + formatData(data))
+ case CommandFailed(_, _) => println("write failed")
+ case Closed => context stop self
+ case "close" => operator ! Close
+ case data: ByteString => operator ! Write(data)
+ }
}
- private def formatData(data: ByteString) = data.mkString("[",",","]")
+ private def formatData(data: ByteString) = data.mkString("[", ",", "]")
} \ No newline at end of file