pekko/akka-docs-new/src/test/scala/tutorial_3/DeviceManager.scala

54 lines
1.6 KiB
Scala
Raw Normal View History

2017-02-27 10:09:36 +01:00
/**
* Copyright (C) 2009-2017 Lightbend Inc. <http://www.lightbend.com>
*/
package tutorial_3
import akka.actor.{ Actor, ActorLogging, ActorRef, Props, Terminated }
import tutorial_3.DeviceManager.RequestTrackDevice
2017-03-30 11:42:52 +02:00
//#device-manager-full
//#device-manager-msgs
2017-02-27 10:09:36 +01:00
object DeviceManager {
2017-03-30 11:42:52 +02:00
//#device-manager-msgs
2017-02-27 10:09:36 +01:00
def props(): Props = Props(new DeviceManager)
2017-03-30 11:42:52 +02:00
//#device-manager-msgs
2017-03-27 13:25:26 +02:00
final case class RequestTrackDevice(groupId: String, deviceId: String)
2017-02-27 10:09:36 +01:00
case object DeviceRegistered
}
2017-03-30 11:42:52 +02:00
//#device-manager-msgs
2017-02-27 10:09:36 +01:00
class DeviceManager extends Actor with ActorLogging {
var groupIdToActor = Map.empty[String, ActorRef]
var actorToGroupId = Map.empty[ActorRef, String]
override def preStart(): Unit = log.info("DeviceManager started")
override def postStop(): Unit = log.info("DeviceManager stopped")
override def receive = {
case trackMsg @ RequestTrackDevice(groupId, _) =>
groupIdToActor.get(groupId) match {
case Some(ref) =>
ref forward trackMsg
case None =>
2017-03-27 13:25:26 +02:00
log.info("Creating device group actor for {}", groupId)
2017-02-27 10:09:36 +01:00
val groupActor = context.actorOf(DeviceGroup.props(groupId), "group-" + groupId)
context.watch(groupActor)
groupActor forward trackMsg
groupIdToActor += groupId -> groupActor
actorToGroupId += groupActor -> groupId
}
case Terminated(groupActor) =>
val groupId = actorToGroupId(groupActor)
2017-03-27 13:25:26 +02:00
log.info("Device group actor for {} has been terminated", groupId)
2017-02-27 10:09:36 +01:00
actorToGroupId -= groupActor
groupIdToActor -= groupId
}
}
2017-03-30 11:42:52 +02:00
//#device-manager-full