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 /src/main/scala/com/github/jodersky/flow/SerialManager.scala | |
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 'src/main/scala/com/github/jodersky/flow/SerialManager.scala')
-rw-r--r-- | src/main/scala/com/github/jodersky/flow/SerialManager.scala | 50 |
1 files changed, 30 insertions, 20 deletions
diff --git a/src/main/scala/com/github/jodersky/flow/SerialManager.scala b/src/main/scala/com/github/jodersky/flow/SerialManager.scala index 3e6e543..8b0a39c 100644 --- a/src/main/scala/com/github/jodersky/flow/SerialManager.scala +++ b/src/main/scala/com/github/jodersky/flow/SerialManager.scala @@ -1,40 +1,50 @@ package com.github.jodersky.flow -import akka.actor.Actor -import Serial._ -import low.{ Serial => LowSerial } -import scala.util.Success import scala.util.Failure -import akka.actor.Props -import scala.concurrent._ +import scala.util.Success +import scala.util.Try +import com.github.jodersky.flow.internal.InternalSerial +import Serial._ +import akka.actor.Actor import akka.actor.ActorLogging +import akka.actor.OneForOneStrategy +import akka.actor.OneForOneStrategy +import akka.actor.Props +import akka.actor.SupervisorStrategy._ +import java.io.IOException class SerialManager extends Actor with ActorLogging { import SerialManager._ import context._ + override val supervisorStrategy = + OneForOneStrategy() { + case _: IOException => Stop + case _: Exception => Escalate + } + def receive = { - case command @ Open(handler, port, baud) => - future{LowSerial.open(port, baud)}.onComplete(_ match { - case Success(serial) => { - log.debug(s"opened low serial port at ${port}, baud ${baud}") - val operator = context.actorOf(Props(classOf[SerialOperator], serial, handler), name = escapePortString(port)) - handler ! Opened(operator) - } - case Failure(t) => { - log.debug(s"failed to open low serial port at ${port}, baud ${baud}, reason: " + t.getMessage()) - handler ! CommandFailed(command, t) - } - }) + case Open(handler, port, baud) => Try { InternalSerial.open(port, baud) } match { + case Failure(t) => { + log.debug(s"failed to open low serial port at ${port}, baud ${baud}, reason: " + t.getMessage()) + handler ! OpenFailed(port, t) + } + + case Success(serial) => { + log.debug(s"opened low-level serial port at ${port}, baud ${baud}") + context.actorOf(Props(classOf[SerialOperator], handler, serial), name = escapePortString(port)) + } + + } } } object SerialManager { - + private def escapePortString(port: String) = port collect { case '/' => '-' case c => c } - + }
\ No newline at end of file |