aboutsummaryrefslogtreecommitdiff
path: root/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala
diff options
context:
space:
mode:
Diffstat (limited to 'vfd-uav/src/main/scala/vfd/uav/MockConnection.scala')
-rw-r--r--vfd-uav/src/main/scala/vfd/uav/MockConnection.scala57
1 files changed, 57 insertions, 0 deletions
diff --git a/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala
new file mode 100644
index 0000000..94a14db
--- /dev/null
+++ b/vfd-uav/src/main/scala/vfd/uav/MockConnection.scala
@@ -0,0 +1,57 @@
+package vfd.uav
+
+import java.util.concurrent.TimeUnit.MILLISECONDS
+import scala.concurrent.duration.FiniteDuration
+import akka.actor.Actor
+import akka.actor.Props
+import akka.actor.Terminated
+import akka.actor.actorRef2Scala
+import akka.actor.ActorLogging
+import scala.util.Random
+
+class MockConnection extends Actor with ActorLogging with Connection {
+ import Connection._
+ import context._
+
+ val messageInterval = FiniteDuration(500, MILLISECONDS)
+
+ override def preStart() = {
+ context.system.scheduler.schedule(messageInterval, messageInterval) {
+ val data = MockPackets.random()
+
+ this.log.debug("sending mock flight data: " + data.mkString("(", ",", ")"))
+ clients foreach (_ ! Received(data))
+ }
+ }
+
+ def receive = {
+ case Connection.Register => register(sender)
+ case Terminated(client) => unregister(client)
+ }
+
+}
+
+object MockConnection {
+ def apply = Props(classOf[MockConnection])
+}
+
+object MockPackets {
+
+ def random() = {
+ Random.nextInt(2) match {
+ case 0 => invalidCrc
+ case 1 => invalidOverflow
+ }
+
+ }
+
+ val invalidCrc = Array(254,1,123,13,13).map(_.toByte)
+ val invalidOverflow = {
+ val data = Array.fill[Byte](1006)(42)
+ data(0) = -2
+ data(1) = 2
+ data(1) = -1
+ data
+ }
+
+} \ No newline at end of file