aboutsummaryrefslogtreecommitdiff
path: root/flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2016-05-16 15:28:59 -0700
committerJakob Odersky <jakob@odersky.com>2016-06-09 03:30:35 -0700
commit92c4b3d41e06ad4b89004212c85248e9e6cd61d7 (patch)
tree69470f7c4ed48edaebea91964d7d552e7eaacf0d /flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala
parentf6f26c2c9e3ec9bdd45fb384483b3450bef5984a (diff)
downloadakka-serial-92c4b3d41e06ad4b89004212c85248e9e6cd61d7.tar.gz
akka-serial-92c4b3d41e06ad4b89004212c85248e9e6cd61d7.tar.bz2
akka-serial-92c4b3d41e06ad4b89004212c85248e9e6cd61d7.zip
Move project to `ch.jodersky` and upgrade sbt-jni
Diffstat (limited to 'flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala')
-rw-r--r--flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala50
1 files changed, 50 insertions, 0 deletions
diff --git a/flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala b/flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala
new file mode 100644
index 0000000..650d08e
--- /dev/null
+++ b/flow-samples/watcher/src/main/scala/ch/jodersky/flow/samples/watcher/main.scala
@@ -0,0 +1,50 @@
+package ch.jodersky.flow
+package samples.watcher
+
+import akka.actor.{ Actor, ActorLogging, ActorSystem, Props }
+import akka.io.IO
+import scala.io.StdIn
+
+class Watcher extends Actor with ActorLogging {
+ import context._
+
+ val ports = List(
+ "/dev/ttyUSB\\d+",
+ "/dev/ttyACM\\d+",
+ "/dev/cu\\d+",
+ "/dev/ttyS\\d+"
+ )
+
+ override def preStart() = {
+ val cmd = Serial.Watch()
+ IO(Serial) ! cmd //watch for new devices
+ log.info(s"Watching ${cmd.directory} for new devices.")
+ }
+
+ def receive = {
+
+ case Serial.CommandFailed(w: Serial.Watch, err) =>
+ log.error(err, s"Could not get a watch on ${w.directory}.")
+ context stop self
+
+ case Serial.Connected(path) =>
+ log.info(s"New device: ${path}")
+ ports.find(path matches _) match {
+ case Some(port) => log.info(s"Device is a serial device.")
+ case None => log.warning(s"Device is NOT serial device.")
+ }
+
+ }
+
+}
+
+object Main {
+
+ def main(args: Array[String]): Unit = {
+ val system = ActorSystem("flow")
+ val watcher = system.actorOf(Props(classOf[Watcher]), name = "watcher")
+ StdIn.readLine()
+ system.terminate()
+ }
+
+}