From 8a724366f55b4a4e8917925919e89a7b3101c8cc Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Wed, 25 Sep 2013 23:05:20 +0200 Subject: [PATCH] make lobby actor broom asynchronous --- modules/lobby/src/main/Lobby.scala | 14 ++++++++------ modules/lobby/src/main/actorApi.scala | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/lobby/src/main/Lobby.scala b/modules/lobby/src/main/Lobby.scala index 2102add891..82e02e3355 100644 --- a/modules/lobby/src/main/Lobby.scala +++ b/modules/lobby/src/main/Lobby.scala @@ -48,14 +48,16 @@ private[lobby] final class Lobby( } } - case Broom ⇒ blocking { - socket ? GetUids mapTo manifest[Iterable[String]] addEffect { uids ⇒ - (HookRepo openNotInUids uids.toSet) foreach remove - HookRepo.cleanupOld foreach remove - } + case Broom ⇒ socket ? GetUids mapTo manifest[Iterable[String]] foreach { uids ⇒ + val hooks = { + (HookRepo openNotInUids uids.toSet) ::: HookRepo.cleanupOld + }.toSet + if (hooks.nonEmpty) self ! RemoveHooks(hooks) } - case Resync ⇒ socket ! HookIds(HookRepo.list map (_.id)) + case RemoveHooks(hooks) ⇒ hooks foreach remove + + case Resync ⇒ socket ! HookIds(HookRepo.list map (_.id)) } private def remove(hook: Hook) = { diff --git a/modules/lobby/src/main/actorApi.scala b/modules/lobby/src/main/actorApi.scala index d6717f0540..3c842af4cb 100644 --- a/modules/lobby/src/main/actorApi.scala +++ b/modules/lobby/src/main/actorApi.scala @@ -22,6 +22,7 @@ case class Connected(enumerator: JsEnumerator, member: Member) case class WithHooks(op: Iterable[String] ⇒ Unit) case class AddHook(hook: Hook, user: Option[User]) case class RemoveHook(hookId: String) +case class RemoveHooks(hooks: Set[Hook]) case class CancelHook(uid: String) case class BiteHook(hookId: String, uid: String, userId: Option[String]) case class JoinHook(uid: String, hook: Hook, game: Game)