aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--project/Build.scala7
-rw-r--r--project/Dependencies.scala3
-rw-r--r--vfd-backend/app/controllers/Application.scala18
-rw-r--r--vfd-frontend/src/main/scala/Frontend.scala37
4 files changed, 41 insertions, 24 deletions
diff --git a/project/Build.scala b/project/Build.scala
index 9c6789b..f4a7834 100644
--- a/project/Build.scala
+++ b/project/Build.scala
@@ -40,10 +40,12 @@ object ApplicationBuild extends Build {
enablePlugins(PlayScala)
settings(common: _*)
settings(
+ resolvers += Resolver.url("scala-js-releases", url("http://dl.bintray.com/content/scala-js/scala-js-releases"))(Resolver.ivyStylePatterns),
libraryDependencies ++= Seq(
bootstrap,
fontawesome,
- jquery
+ jquery,
+ picklingPlay
)
)
dependsOn(uav)
@@ -57,7 +59,8 @@ object ApplicationBuild extends Build {
settings(
libraryDependencies ++= Seq(
rx,
- dom
+ dom,
+ pickling
)
)
)
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 73b07ac..ae56455 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -14,5 +14,8 @@ object Dependencies {
val dom = "org.scala-lang.modules.scalajs" %%%! "scalajs-dom" % "0.6"
val rx = "com.scalarx" %%%! "scalarx" % "0.2.5"
+ val pickling = "org.scalajs" %%%! "scalajs-pickling" % "0.3.1"
+ val picklingPlay = "org.scalajs" %% "scalajs-pickling-play-json" % "0.3.1"
+
} \ No newline at end of file
diff --git a/vfd-backend/app/controllers/Application.scala b/vfd-backend/app/controllers/Application.scala
index 5a473b4..f048a07 100644
--- a/vfd-backend/app/controllers/Application.scala
+++ b/vfd-backend/app/controllers/Application.scala
@@ -5,7 +5,6 @@ import play.api.mvc._
import play.api.Play.current
import play.api.mvc.WebSocket.FrameFormatter
-import play.api.libs.functional.syntax._
import play.api.libs.json._
import vfd.uav.DataFrame
@@ -22,7 +21,22 @@ object Application extends Controller {
Ok(views.html.index())
}
- implicit val dataFrameFormat = Json.format[DataFrame]
+ implicit object DataFrameFormat extends Format[DataFrame] {
+ import org.scalajs.spickling._
+ import org.scalajs.spickling.playjson._
+ import play.api.data.validation.ValidationError
+
+ PicklerRegistry.register[DataFrame]
+
+ def writes(o: DataFrame): JsValue = PicklerRegistry.pickle(o)
+
+ def reads(j: JsValue): JsResult[DataFrame] = PicklerRegistry.unpickle(j) match {
+ case df: DataFrame => JsSuccess(df)
+ case _ => JsError("unpickling yielded wrong type")
+ }
+ }
+
+ //implicit val dataFrameFormat = Json.format[DataFrame]
implicit val dataFrameFormatter = FrameFormatter.jsonFrame[DataFrame]
def socket = WebSocket.acceptWithActor[String, DataFrame] { request =>
diff --git a/vfd-frontend/src/main/scala/Frontend.scala b/vfd-frontend/src/main/scala/Frontend.scala
index 9a628f6..dcb6a8d 100644
--- a/vfd-frontend/src/main/scala/Frontend.scala
+++ b/vfd-frontend/src/main/scala/Frontend.scala
@@ -3,36 +3,33 @@
import scala.scalajs.js
import js.annotation.JSExport
import org.scalajs.dom
+import org.scalajs.spickling._
+import org.scalajs.spickling.jsany._
-class Data extends js.Object {
- def roll: Double = ???
- def pitch: Double = ???
- def heading: Double = ???
- def altitude: Double = ???
- def temperature: Double = ???
-}
@JSExport
-class Frontend(attitudeSelector: String, azimuthSelector: String, altitudeSelector: String) {
+class Frontend {
+ PicklerRegistry.register[vfd.uav.DataFrame]
- val svg = dom.document.querySelector(attitudeSelector).asInstanceOf[dom.HTMLObjectElement]
- val svg2 = dom.document.querySelector(azimuthSelector).asInstanceOf[dom.HTMLObjectElement]
- var svgDoc = svg.contentDocument;
- var svgDoc2 = svg2.contentDocument;
- val svg3 = dom.document.querySelector(altitudeSelector).asInstanceOf[dom.HTMLObjectElement]
- var svgDoc3 = svg3.contentDocument;
+ lazy val attitude = dom.document.getElementById("attitude").asInstanceOf[dom.HTMLObjectElement].contentDocument
+ lazy val heading = dom.document.getElementById("heading").asInstanceOf[dom.HTMLObjectElement].contentDocument
+ lazy val altitude = dom.document.getElementById("altitude").asInstanceOf[dom.HTMLObjectElement].contentDocument
@JSExport
def main() = {
- var roll = svgDoc.getElementById("roll");
- var pitch = svgDoc.getElementById("pitch");
- var heading = svgDoc2.getElementById("heading");
- var altitude = svgDoc3.getElementById("hand")
+ var roll = attitude.getElementById("roll");
+ var pitch = attitude.getElementById("pitch");
+ var heading = this.heading.getElementById("heading");
+ var altitude = this.altitude.getElementById("hand")
val connection = new dom.WebSocket("ws://localhost:9000/socket");
connection.onmessage = (e: dom.MessageEvent) => {
- Console.println(e.data);
- val data = js.JSON.parse(e.data.asInstanceOf[String]).asInstanceOf[Data]
+
+ val data = PicklerRegistry.unpickle(js.JSON.parse(e.data.asInstanceOf[String]).asInstanceOf[js.Any] ).asInstanceOf[vfd.uav.DataFrame]
+ //Console.println(d.roll)
+
+
+
roll.setAttribute("transform", "rotate(" + data.roll.toDouble + ")");
pitch.setAttribute("transform", "translate(0, " + data.pitch.toDouble + ")");