diff options
author | Jakob Odersky <jodersky@gmail.com> | 2013-06-27 13:00:55 +0200 |
---|---|---|
committer | Jakob Odersky <jodersky@gmail.com> | 2013-06-27 13:00:55 +0200 |
commit | 77bddab03e8905fcd1bd84778d097be745a3e08d (patch) | |
tree | 7a6d64aa131368b76aaacda71c3ed1fb23c7b2e7 /samples | |
parent | f007a17cca8213193f5a6b51e3bcb61653230ff4 (diff) | |
download | akka-serial-77bddab03e8905fcd1bd84778d097be745a3e08d.tar.gz akka-serial-77bddab03e8905fcd1bd84778d097be745a3e08d.tar.bz2 akka-serial-77bddab03e8905fcd1bd84778d097be745a3e08d.zip |
lots of changes mon internal thread handling and serial operation
Diffstat (limited to 'samples')
-rw-r--r-- | samples/rwc/src/main/scala/com/github/jodersky/flow/example/Main.scala | 7 | ||||
-rw-r--r-- | samples/rwc/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala | 54 |
2 files changed, 36 insertions, 25 deletions
diff --git a/samples/rwc/src/main/scala/com/github/jodersky/flow/example/Main.scala b/samples/rwc/src/main/scala/com/github/jodersky/flow/example/Main.scala index 71c40bc..985513b 100644 --- a/samples/rwc/src/main/scala/com/github/jodersky/flow/example/Main.scala +++ b/samples/rwc/src/main/scala/com/github/jodersky/flow/example/Main.scala @@ -4,14 +4,13 @@ package example import scala.concurrent.ExecutionContext.Implicits.global import scala.util.Success import scala.util.Try - import com.github.jodersky.flow.Serial import com.github.jodersky.flow.Serial._ - import akka.actor.ActorSystem import akka.actor.Props import akka.io.IO import akka.util.ByteString +import com.github.jodersky.flow.internal.InternalSerial object Main { @@ -26,11 +25,11 @@ object Main { val port = "/dev/ttyACM0" val baud = 115200 - low.Serial.debug(true) + // InternalSerial.debug(true) implicit val system = ActorSystem("flow") val serial = system.actorOf(Props(classOf[SerialHandler], port, baud), name = "serial-handler") - + readLine() serial ! ByteString("hello back".getBytes()) diff --git a/samples/rwc/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala b/samples/rwc/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala index 8a717d1..ddcde8d 100644 --- a/samples/rwc/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala +++ b/samples/rwc/src/main/scala/com/github/jodersky/flow/example/SerialHandler.scala @@ -1,43 +1,55 @@ package com.github.jodersky.flow.example import com.github.jodersky.flow.Serial._ -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 - +import akka.actor.Terminated class SerialHandler(port: String, baud: Int) extends Actor with ActorLogging { import context._ - - println(s"Requesting port open: ${port}, baud: ${baud}") + + log.info(s"Requesting manager to open port: ${port}, baud: ${baud}") IO(Serial) ! Serial.Open(self, port, baud) - def receive = { - case CommandFailed(_: Open, reason) => { - println(s"connection failed, reason: ${reason}") + + case OpenFailed(_, reason) => { + log.error(s"Connection failed, stopping handler. Reason: ${reason}") context stop self } - case Opened(operator) => - println("Port opened.") - context become { - case Received(data) => { - println("received data: " + formatData(data)) - println("as string: " + new String(data.toArray, "UTF-8")) - } - 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) - } + case Opened(port) => { + log.info(s"Port ${port} is now open.") + context watch sender + context become opened(sender) + } + } + + def opened(operator: ActorRef): Receive = { + case Terminated(`operator`) => { + log.info("operator down, handler exiting") + context.stop(self) + } + case Received(data) => { + log.info("Received data: " + formatData(data)) + log.info("As string: " + new String(data.toArray, "UTF-8")) + } + case Wrote(data) => log.info("Got ACK for writing data: " + formatData(data)) + case Closed => { + log.info("Operator closed, exiting handler.") + context stop self + } + case "close" => { + log.info("Initiating close.") + operator ! Close + } + case data: ByteString => operator ! Write(data, true) } - + private def formatData(data: ByteString) = data.mkString("[", ",", "]") }
\ No newline at end of file |