diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2019-11-03 17:33:31 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2019-11-03 18:33:31 +0800 |
commit | c95bf293dbe23fa6c5fd9e23b35a4e4ce34da415 (patch) | |
tree | 48006bcf854ef635f64da57dd23f59027af652ce /cask/src | |
parent | 12a91e2b6c78cd347996663f56eadb9616834823 (diff) | |
download | cask-c95bf293dbe23fa6c5fd9e23b35a4e4ce34da415.tar.gz cask-c95bf293dbe23fa6c5fd9e23b35a4e4ce34da415.tar.bz2 cask-c95bf293dbe23fa6c5fd9e23b35a4e4ce34da415.zip |
Flesh out `BatchActor.scala` into its own module, `cask.Actor`. Add the first unit test for an asynchronous logging actor
Diffstat (limited to 'cask/src')
-rw-r--r-- | cask/src/cask/endpoints/WebSocketEndpoint.scala | 18 | ||||
-rw-r--r-- | cask/src/cask/main/Routes.scala | 5 | ||||
-rw-r--r-- | cask/src/cask/package.scala | 2 |
3 files changed, 14 insertions, 11 deletions
diff --git a/cask/src/cask/endpoints/WebSocketEndpoint.scala b/cask/src/cask/endpoints/WebSocketEndpoint.scala index 905c5f1..fcb40ec 100644 --- a/cask/src/cask/endpoints/WebSocketEndpoint.scala +++ b/cask/src/cask/endpoints/WebSocketEndpoint.scala @@ -32,8 +32,8 @@ class websocket(val path: String, override val subpath: Boolean = false) def wrapPathSegment(s: String): Seq[String] = Seq(s) } -case class WsHandler(f: WsChannelActor => cask.util.BatchActor[Ws.Event]) - (implicit ec: ExecutionContext, log: Logger) +case class WsHandler(f: WsChannelActor => cask.actor.Actor[Ws.Event]) + (implicit ac: cask.actor.Context, log: Logger) extends WebsocketResult with WebSocketConnectionCallback { def onConnect(exchange: WebSocketHttpExchange, channel: WebSocketChannel): Unit = { channel.suspendReceives() @@ -75,9 +75,9 @@ extends WebsocketResult with WebSocketConnectionCallback { } class WsChannelActor(channel: WebSocketChannel) - (implicit ec: ExecutionContext, log: Logger) -extends cask.util.BatchActor[Ws.Event]{ - def run(items: Seq[Ws.Event]): Unit = items.foreach{ + (implicit ac: cask.actor.Context, log: Logger) +extends cask.actor.SimpleActor[Ws.Event]{ + def run(item: Ws.Event): Unit = item match{ case Ws.Text(value) => WebSockets.sendTextBlocking(value, channel) case Ws.Binary(value) => WebSockets.sendBinaryBlocking(ByteBuffer.wrap(value), channel) case Ws.Ping(value) => WebSockets.sendPingBlocking(ByteBuffer.wrap(value), channel) @@ -87,10 +87,10 @@ extends cask.util.BatchActor[Ws.Event]{ } case class WsActor(handle: PartialFunction[Ws.Event, Unit]) - (implicit ec: ExecutionContext, log: Logger) -extends cask.util.BatchActor[Ws.Event]{ - def run(items: Seq[Ws.Event]): Unit = { - items.foreach(handle.applyOrElse(_, (x: Ws.Event) => ())) + (implicit ac: cask.actor.Context, log: Logger) +extends cask.actor.SimpleActor[Ws.Event]{ + def run(item: Ws.Event): Unit = { + handle.lift(item) } } diff --git a/cask/src/cask/main/Routes.scala b/cask/src/cask/main/Routes.scala index 1b83be3..68e3af4 100644 --- a/cask/src/cask/main/Routes.scala +++ b/cask/src/cask/main/Routes.scala @@ -7,7 +7,10 @@ import language.experimental.macros trait Routes{ def decorators = Seq.empty[cask.router.Decorator[_, _, _]] - implicit def executionContext = concurrent.ExecutionContext.Implicits.global + implicit val actorContext = new cask.actor.Context.Simple( + concurrent.ExecutionContext.Implicits.global, + log.exception + ) private[this] var metadata0: RoutesEndpointsMetadata[this.type] = null def caskMetadata = if (metadata0 != null) metadata0 diff --git a/cask/src/cask/package.scala b/cask/src/cask/package.scala index 7c1d61c..ebba984 100644 --- a/cask/src/cask/package.scala +++ b/cask/src/cask/package.scala @@ -55,6 +55,6 @@ package object cask { type Logger = util.Logger val Logger = util.Logger - type BatchActor[T] = util.BatchActor[T] + type BatchActor[T] = actor.BatchActor[T] } |