diff options
author | Jakob Odersky <jakob@odersky.com> | 2016-02-24 20:33:51 -0800 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2016-02-24 20:33:51 -0800 |
commit | 8186b3622ce1c9d2b50df3d264ab526dc1e61d77 (patch) | |
tree | b4446408291c9f179e1c270a561523023ac6a105 /mavigator-server/src/main/scala/mavigator/Router.scala | |
parent | 6c4e8849d753734b3e50523dcdb372fbdbccc2c1 (diff) | |
parent | a41de68066007852d7d3dbf019d75b4caf7463ad (diff) | |
download | mavigator-8186b3622ce1c9d2b50df3d264ab526dc1e61d77.tar.gz mavigator-8186b3622ce1c9d2b50df3d264ab526dc1e61d77.tar.bz2 mavigator-8186b3622ce1c9d2b50df3d264ab526dc1e61d77.zip |
Merge branch 'akka-streams'
Diffstat (limited to 'mavigator-server/src/main/scala/mavigator/Router.scala')
-rw-r--r-- | mavigator-server/src/main/scala/mavigator/Router.scala | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/mavigator-server/src/main/scala/mavigator/Router.scala b/mavigator-server/src/main/scala/mavigator/Router.scala new file mode 100644 index 0000000..07e40b0 --- /dev/null +++ b/mavigator-server/src/main/scala/mavigator/Router.scala @@ -0,0 +1,80 @@ +package mavigator + +import akka.actor._ +import akka.stream._ +import akka.stream.scaladsl._ +import akka.http.scaladsl._ +import akka.http.scaladsl.model._ +import akka.http.scaladsl.model.ws._ +import akka.http.scaladsl.server._ +import uav.Uav +import akka.util._ + +import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller} +import akka.http.scaladsl.model.MediaTypes._ +import akka.http.scaladsl.model.MediaType +import play.twirl.api.{ Xml, Txt, Html } + + +object Router { + import Directives._ + + val socketUrl = "ws://localhost:8080/mavlink" + + def route(implicit system: ActorSystem): Route = ( + path("dashboard" / IntNumber) { id => + get { + val html = mavigator.views.html.app( + "Mavigator", + "mavigator_dashboard_Main", + Map( + "socketUrl" -> socketUrl, + "remoteSystemId" -> "0", + "systemId" -> "0", + "componentId" -> "0" + ) + ) + complete(html) + } + } ~ + path("mavlink") { + get { + val fromWebSocket = Flow[Message].collect{ + case BinaryMessage.Strict(data) => data + } + + val toWebSocket = Flow[ByteString].map{bytes => + BinaryMessage(bytes) + } + + val backend = Uav().connect() + + handleWebSocketMessages(fromWebSocket via backend via toWebSocket) + } + } ~ + pathPrefix("assets") { + get { + encodeResponse { + getFromResourceDirectory("assets") + } + } + } ~ + pathEndOrSingleSlash { + get { + val html = mavigator.views.html.app( + "Index", + "mavigator_index_Main", + Map( + "socketUrl" -> socketUrl + ) + ) + complete(html) + } + } + ) + + implicit val twirlHtml : ToEntityMarshaller[Html] = Marshaller.StringMarshaller.wrap(`text/html`){(h: Html) => + h.toString + } + +} |