From b83eec01c8db8a8aa499d6c498ff85987005fe83 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 16 Sep 2019 12:21:10 +0800 Subject: 0.2.8 --- example/compress2/app/src/Compress2.scala | 4 +- example/compress3/app/src/Compress3.scala | 4 +- .../app/src/MinimalApplication2.scala | 4 +- example/websockets3/app/src/Websockets3.scala | 21 ++++++ .../websockets3/app/test/src/ExampleTests.scala | 75 ++++++++++++++++++++++ example/websockets3/build.sc | 17 +++++ 6 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 example/websockets3/app/src/Websockets3.scala create mode 100644 example/websockets3/app/test/src/ExampleTests.scala create mode 100644 example/websockets3/build.sc (limited to 'example') diff --git a/example/compress2/app/src/Compress2.scala b/example/compress2/app/src/Compress2.scala index b0deaa0..e6c4cc9 100644 --- a/example/compress2/app/src/Compress2.scala +++ b/example/compress2/app/src/Compress2.scala @@ -1,8 +1,6 @@ package app -import cask.util.Logger - -case class Compress2()(implicit val log: Logger) extends cask.Routes{ +case class Compress2()(implicit val log: cask.Logger) extends cask.Routes{ override def decorators = Seq(new cask.decorators.compress()) @cask.get("/") diff --git a/example/compress3/app/src/Compress3.scala b/example/compress3/app/src/Compress3.scala index 95bd851..49062a9 100644 --- a/example/compress3/app/src/Compress3.scala +++ b/example/compress3/app/src/Compress3.scala @@ -1,8 +1,6 @@ package app -import cask.util.Logger - -case class Compress3()(implicit val log: Logger) extends cask.Routes{ +case class Compress3()(implicit val log: cask.Logger) extends cask.Routes{ @cask.get("/") def hello() = { diff --git a/example/minimalApplication2/app/src/MinimalApplication2.scala b/example/minimalApplication2/app/src/MinimalApplication2.scala index 41ca55f..efe9204 100644 --- a/example/minimalApplication2/app/src/MinimalApplication2.scala +++ b/example/minimalApplication2/app/src/MinimalApplication2.scala @@ -1,8 +1,6 @@ package app -import cask.util.Logger - -case class MinimalRoutes()(implicit val log: Logger) extends cask.Routes{ +case class MinimalRoutes()(implicit val log: cask.Logger) extends cask.Routes{ @cask.get("/") def hello() = { "Hello World!" diff --git a/example/websockets3/app/src/Websockets3.scala b/example/websockets3/app/src/Websockets3.scala new file mode 100644 index 0000000..8368e0d --- /dev/null +++ b/example/websockets3/app/src/Websockets3.scala @@ -0,0 +1,21 @@ +package app + +case class Websockets3()(implicit val log: cask.Logger) extends cask.Routes{ + @cask.websocket("/connect/:userName") + def showUserProfile(userName: String): cask.WebsocketResult = { + if (userName != "haoyi") cask.Response("", statusCode = 403) + else cask.WsHandler { channel => + cask.WsActor { + case cask.WsActor.Text("") => channel.send(cask.WsActor.Close()) + case cask.WsActor.Text(data) => + channel.send(cask.WsActor.Text(userName + " " + data)) + } + } + } + + initialize() +} + +object Websockets3Main extends cask.Main{ + val allRoutes = Seq(Websockets3()) +} diff --git a/example/websockets3/app/test/src/ExampleTests.scala b/example/websockets3/app/test/src/ExampleTests.scala new file mode 100644 index 0000000..a595c4c --- /dev/null +++ b/example/websockets3/app/test/src/ExampleTests.scala @@ -0,0 +1,75 @@ +package app + +import java.util.concurrent.atomic.AtomicInteger + +import org.asynchttpclient.ws.{WebSocket, WebSocketListener, WebSocketUpgradeHandler} +import utest._ + +object ExampleTests extends TestSuite{ + + + def withServer[T](example: cask.main.Main)(f: String => T): T = { + val server = io.undertow.Undertow.builder + .addHttpListener(8080, "localhost") + .setHandler(example.defaultHandler) + .build + server.start() + val res = + try f("http://localhost:8080") + finally server.stop() + res + } + + val tests = Tests{ + test("Websockets") - withServer(Websockets3Main){ host => + @volatile var out = List.empty[String] + val client = org.asynchttpclient.Dsl.asyncHttpClient(); + try{ + + // 4. open websocket + val ws: WebSocket = client.prepareGet("ws://localhost:8080/connect/haoyi") + .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener( + new WebSocketListener() { + + override def onTextFrame(payload: String, finalFragment: Boolean, rsv: Int) { + out = payload :: out + } + + def onOpen(websocket: WebSocket) = () + + def onClose(websocket: WebSocket, code: Int, reason: String) = () + + def onError(t: Throwable) = () + }).build() + ).get() + + // 5. send messages + ws.sendTextFrame("hello") + ws.sendTextFrame("world") + ws.sendTextFrame("") + Thread.sleep(100) + out ==> List("haoyi world", "haoyi hello") + + var error: String = "" + val cli2 = client.prepareGet("ws://localhost:8080/connect/nobody") + .execute(new WebSocketUpgradeHandler.Builder().addWebSocketListener( + new WebSocketListener() { + + def onOpen(websocket: WebSocket) = () + + def onClose(websocket: WebSocket, code: Int, reason: String) = () + + def onError(t: Throwable) = { + error = t.toString + } + }).build() + ).get() + + assert(error.contains("403")) + + } finally{ + client.close() + } + } + } +} diff --git a/example/websockets3/build.sc b/example/websockets3/build.sc new file mode 100644 index 0000000..197e285 --- /dev/null +++ b/example/websockets3/build.sc @@ -0,0 +1,17 @@ +import mill._, scalalib._ + + +trait AppModule extends ScalaModule{ + def scalaVersion = "2.13.0" + def ivyDeps = Agg[Dep]( + ) + object test extends Tests{ + def testFrameworks = Seq("utest.runner.Framework") + + def ivyDeps = Agg( + ivy"com.lihaoyi::utest::0.7.1", + ivy"com.lihaoyi::requests::0.2.0", + ivy"org.asynchttpclient:async-http-client:2.5.2" + ) + } +} \ No newline at end of file -- cgit v1.2.3