use Monoid[Future[_]] to append concurrent futures
This commit is contained in:
parent
b455b09614
commit
78d06db07e
|
@ -6,6 +6,7 @@ import actorApi.map._
|
|||
import akka.actor._
|
||||
import akka.pattern.{ ask, pipe }
|
||||
import makeTimeout.short
|
||||
import scalaz.Monoid
|
||||
|
||||
trait ActorMap[A <: Actor] extends Actor {
|
||||
|
||||
|
@ -42,10 +43,16 @@ trait ActorMap[A <: Actor] extends Actor {
|
|||
actors.values foreach (_ ! msg)
|
||||
}
|
||||
|
||||
// sequential
|
||||
protected def askAll(msg: Any): Fu[List[Any]] = {
|
||||
actors.values.toList map (_ ? msg)
|
||||
} sequenceFu
|
||||
|
||||
// concurrent
|
||||
protected def zipAll[A: Monoid: Manifest](msg: Any): Fu[A] = {
|
||||
actors.values.toList map (_ ? msg mapTo manifest[A])
|
||||
}.suml
|
||||
|
||||
protected def get(id: String): Fu[ActorRef] = self ? Get(id) mapTo manifest[ActorRef]
|
||||
|
||||
protected def withActor(id: String)(op: ActorRef ⇒ Unit) = get(id) foreach op
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
package lila.socket
|
||||
|
||||
import actorApi._
|
||||
import akka.actor._
|
||||
import akka.pattern.{ ask, pipe }
|
||||
import makeTimeout.short
|
||||
import play.api.libs.json._
|
||||
|
||||
import actorApi._
|
||||
import lila.hub.actorApi.{ GetNbMembers, NbMembers, WithUserIds, WithSocketUserIds, SendTo, SendTos }
|
||||
import lila.hub.ActorMap
|
||||
import lila.socket.actorApi.{ Connected ⇒ _, _ }
|
||||
import makeTimeout.short
|
||||
|
||||
trait SocketHubActor[A <: SocketActor[_]] extends Socket with ActorMap[A] {
|
||||
|
||||
|
@ -16,8 +16,7 @@ trait SocketHubActor[A <: SocketActor[_]] extends Socket with ActorMap[A] {
|
|||
|
||||
private def _socketHubReceive: Receive = {
|
||||
|
||||
case msg @ GetNbMembers ⇒
|
||||
askAll(msg) mapTo manifest[List[Int]] map (_.sum) pipeTo sender
|
||||
case msg @ GetNbMembers ⇒ zipAll[Int](msg) pipeTo sender
|
||||
|
||||
case msg @ NbMembers(_) ⇒ tellAll(msg)
|
||||
|
||||
|
|
Loading…
Reference in a new issue