diff options
Diffstat (limited to 'mavigator-server/src/main/scala/mavigator/Router.scala')
-rw-r--r-- | mavigator-server/src/main/scala/mavigator/Router.scala | 120 |
1 files changed, 66 insertions, 54 deletions
diff --git a/mavigator-server/src/main/scala/mavigator/Router.scala b/mavigator-server/src/main/scala/mavigator/Router.scala index 389cb4d..226d6c1 100644 --- a/mavigator-server/src/main/scala/mavigator/Router.scala +++ b/mavigator-server/src/main/scala/mavigator/Router.scala @@ -1,80 +1,92 @@ package mavigator import akka.actor._ -import akka.stream._ -import akka.stream.scaladsl._ -import akka.http.scaladsl._ +import akka.http.scaladsl.marshalling.{Marshaller, ToEntityMarshaller} +import akka.http.scaladsl.model.MediaTypes._ import akka.http.scaladsl.model._ +import akka.http.scaladsl.model.Uri.Path 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 } +import akka.stream.scaladsl._ +import play.twirl.api.Html +import uav.Uav object Router { import Directives._ - val socketUrl = "ws://localhost:8080/mavlink" + final val SocketEndpoint = "mavlink" + + def withSocketUri: Directive1[Uri] = extractUri.map { uri => + uri.withScheme("ws").withPath(Path.Empty / SocketEndpoint) + } def route(implicit system: ActorSystem): Route = ( - path("cockpit" / IntNumber) { id => + path("whoami") { get { - val html = mavigator.views.html.app( - "Mavigator", - "mavigator_cockpit_Main", - Map( - "socketUrl" -> socketUrl, - "remoteSystemId" -> "0", - "systemId" -> "0", - "componentId" -> "0" - ) - ) - complete(html) + withSocketUri { sock => + complete(sock.toString) + } } } ~ - path("mavlink") { - get { - val fromWebSocket = Flow[Message].collect{ - case BinaryMessage.Strict(data) => data + path("cockpit" / IntNumber) { id => + get { + withSocketUri { socket => + val html = mavigator.views.html.app( + "Mavigator", + "mavigator_cockpit_Main", + Map( + "socketUrl" -> socket.toString, + "remoteSystemId" -> id.toString + ) + ) + complete(html) + } } + } ~ + path(SocketEndpoint) { + get { + val fromWebSocket = Flow[Message].collect{ + case BinaryMessage.Strict(data) => data + } - val toWebSocket = Flow[ByteString].map{bytes => - BinaryMessage(bytes) - } + val toWebSocket = Flow[ByteString].map{bytes => + BinaryMessage(bytes) + } - val backend = Uav().connect() + val backend = Uav().connect() - handleWebSocketMessages(fromWebSocket via backend via toWebSocket) - } - } ~ - pathPrefix("assets") { - get { - encodeResponse { - getFromResourceDirectory("assets") + handleWebSocketMessages(fromWebSocket via backend via toWebSocket) + } + } ~ + pathEndOrSingleSlash { + get { + withSocketUri { socket => + val html = mavigator.views.html.app( + "Index", + "mavigator_index_Main", + Map( + "socketUrl" -> socket.toString + ) + ) + complete(html) + } + } + } ~ + 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 - } - + /** Enables completing requests with html. */ + implicit val twirlHtml : ToEntityMarshaller[Html] = + Marshaller.StringMarshaller.wrap(`text/html`){ h: Html => + h.toString + } + } |