aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/github/jodersky/flow/SerialManager.scala
diff options
context:
space:
mode:
authorJakob Odersky <jodersky@gmail.com>2013-06-27 13:00:55 +0200
committerJakob Odersky <jodersky@gmail.com>2013-06-27 13:00:55 +0200
commit77bddab03e8905fcd1bd84778d097be745a3e08d (patch)
tree7a6d64aa131368b76aaacda71c3ed1fb23c7b2e7 /src/main/scala/com/github/jodersky/flow/SerialManager.scala
parentf007a17cca8213193f5a6b51e3bcb61653230ff4 (diff)
downloadakka-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.scala50
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