summaryrefslogtreecommitdiff
path: root/examples/crossBuilds/clientserver2/app
diff options
context:
space:
mode:
Diffstat (limited to 'examples/crossBuilds/clientserver2/app')
-rw-r--r--examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala47
-rw-r--r--examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala21
-rw-r--r--examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala54
-rw-r--r--examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala7
4 files changed, 129 insertions, 0 deletions
diff --git a/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala b/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala
new file mode 100644
index 0000000..8894262
--- /dev/null
+++ b/examples/crossBuilds/clientserver2/app/js/src/main/scala/simple/Client.scala
@@ -0,0 +1,47 @@
+package simple
+import scalatags.JsDom.all._
+import org.scalajs.dom
+import dom.html
+import scalajs.js.annotation.JSExport
+import scalajs.concurrent.JSExecutionContext.Implicits.runNow
+import autowire._
+
+object Ajaxer extends autowire.Client[String, upickle.Reader, upickle.Writer]{
+ override def doCall(req: Request) = {
+ dom.ext.Ajax.post(
+ url = "/ajax/" + req.path.mkString("/"),
+ data = upickle.write(req.args)
+ ).map(_.responseText)
+ }
+
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}
+
+@JSExport
+object Client extends{
+ @JSExport
+ def main(container: html.Div) = {
+ val inputBox = input.render
+ val outputBox = ul.render
+ def update() = Ajaxer[Api].list(inputBox.value).call().foreach{ data =>
+ outputBox.innerHTML = ""
+ for(FileData(name, size) <- data){
+ outputBox.appendChild(
+ li(
+ b(name), " - ", size, " bytes"
+ ).render
+ )
+ }
+ }
+ inputBox.onkeyup = (e: dom.Event) => update()
+ update()
+ container.appendChild(
+ div(
+ h1("File Search"),
+ inputBox,
+ outputBox
+ ).render
+ )
+ }
+} \ No newline at end of file
diff --git a/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala
new file mode 100644
index 0000000..c04107b
--- /dev/null
+++ b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Page.scala
@@ -0,0 +1,21 @@
+package simple
+import scalatags.Text.all._
+
+object Page{
+ val boot =
+ "simple.Client().main(document.getElementById('contents'))"
+ val skeleton =
+ html(
+ head(
+ script(src:="/appjs-fastopt.js"),
+ link(
+ rel:="stylesheet",
+ href:="http://yui.yahooapis.com/pure/0.5.0/pure-min.css"
+ )
+ ),
+ body(
+ onload:=boot,
+ div(id:="contents")
+ )
+ )
+}
diff --git a/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala
new file mode 100644
index 0000000..8967c17
--- /dev/null
+++ b/examples/crossBuilds/clientserver2/app/jvm/src/main/scala/simple/Server.scala
@@ -0,0 +1,54 @@
+package simple
+
+import akka.actor.ActorSystem
+import spray.http.{HttpEntity, MediaTypes}
+import spray.routing.SimpleRoutingApp
+import scala.concurrent.ExecutionContext.Implicits.global
+
+object Router extends autowire.Server[String, upickle.Reader, upickle.Writer]{
+ def read[Result: upickle.Reader](p: String) = upickle.read[Result](p)
+ def write[Result: upickle.Writer](r: Result) = upickle.write(r)
+}
+
+object Server extends SimpleRoutingApp with Api{
+ def main(args: Array[String]): Unit = {
+ implicit val system = ActorSystem()
+ startServer("localhost", port = 8080){
+ get{
+ pathSingleSlash{
+ complete{
+ HttpEntity(
+ MediaTypes.`text/html`,
+ Page.skeleton.render
+ )
+ }
+ } ~
+ getFromResourceDirectory("")
+ } ~
+ post{
+ path("ajax" / Segments){ s =>
+ extract(_.request.entity.asString) { e =>
+ complete {
+ Router.route[Api](Server)(
+ autowire.Core.Request(
+ s,
+ upickle.read[Map[String, String]](e)
+ )
+ )
+ }
+ }
+ }
+ }
+ }
+ }
+ def list(path: String) = {
+ val (dir, last) = path.splitAt(path.lastIndexOf("/") + 1)
+ val files =
+ Option(new java.io.File("./" + dir).listFiles())
+ .toSeq.flatten
+ for{
+ f <- files
+ if f.getName.startsWith(last)
+ } yield FileData(f.getName, f.length())
+ }
+} \ No newline at end of file
diff --git a/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala b/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala
new file mode 100644
index 0000000..c7b17b7
--- /dev/null
+++ b/examples/crossBuilds/clientserver2/app/shared/src/main/scala/simple/Shared.scala
@@ -0,0 +1,7 @@
+package simple
+
+case class FileData(name: String, size: Long)
+
+trait Api{
+ def list(path: String): Seq[FileData]
+} \ No newline at end of file