From 892bd6053aff21cda2fbabddb824c9710d7baafa Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 18 Jun 2013 23:55:38 +0200 Subject: repair broken example --- .../com/github/jodersky/flow/example/Main.scala | 10 ++--- .../jodersky/flow/example/SerialHandler.scala | 46 ++++++++++++---------- 2 files changed, 29 insertions(+), 27 deletions(-) (limited to 'samples') diff --git a/samples/src/main/scala/com/github/jodersky/flow/example/Main.scala b/samples/src/main/scala/com/github/jodersky/flow/example/Main.scala index 20fffe2..c25270b 100644 --- a/samples/src/main/scala/com/github/jodersky/flow/example/Main.scala +++ b/samples/src/main/scala/com/github/jodersky/flow/example/Main.scala @@ -26,15 +26,13 @@ object Main { val port = "/dev/ttyACM0" val baud = 115200 - //low.Serial.debug(true) + low.Serial.debug(true) implicit val system = ActorSystem("flow") - val serial = system.actorOf(Props[SerialHandler], name = "serial-handler") - - IO(Serial) ! Serial.Open(serial, port, baud) - + val serial = system.actorOf(Props(classOf[SerialHandler], port, baud), name = "serial-handler") + readLine() - serial ! Write(ByteString(42)) + serial ! ByteString(42) readLine() //serial ! Close 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 -- cgit v1.2.3