From 0ffc19859dccdb752ce16e6b9264b02312064a3d Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sun, 24 May 2015 13:35:42 +0200 Subject: add watcher sample --- .../jodersky/flow/samples/watcher/main.scala | 50 ++++++++++++++++++++++ project/Build.scala | 7 +++ 2 files changed, 57 insertions(+) create mode 100644 flow-samples/watcher/src/main/scala/com/github/jodersky/flow/samples/watcher/main.scala diff --git a/flow-samples/watcher/src/main/scala/com/github/jodersky/flow/samples/watcher/main.scala b/flow-samples/watcher/src/main/scala/com/github/jodersky/flow/samples/watcher/main.scala new file mode 100644 index 0000000..92cc3ad --- /dev/null +++ b/flow-samples/watcher/src/main/scala/com/github/jodersky/flow/samples/watcher/main.scala @@ -0,0 +1,50 @@ +package com.github.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.shutdown() + } + +} diff --git a/project/Build.scala b/project/Build.scala index 915d0fb..35a0d90 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -70,4 +70,11 @@ object FlowBuild extends Build { ) ) + lazy val samplesWatcher = ( + Project("samples-watcher", file("flow-samples") / "watcher") + settings(commonSettings: _*) + settings(runSettings: _*) + dependsOn(main) + ) + } -- cgit v1.2.3