Switching approaches for EmptyLocalActorRef and DeadLetterActorRef
This commit is contained in:
parent
e86910c1da
commit
a413a9394b
1 changed files with 22 additions and 14 deletions
|
|
@ -415,15 +415,20 @@ private[akka] class EmptyLocalActorRef(override val provider: ActorRefProvider,
|
|||
|
||||
override def isTerminated(): Boolean = true
|
||||
|
||||
override def sendSystemMessage(message: SystemMessage): Unit = message match {
|
||||
case Watch(watchee, watcher) ⇒ if (watchee == this && watcher != this) watcher ! Terminated(watchee)(stopped = false)
|
||||
case _ ⇒
|
||||
}
|
||||
override def sendSystemMessage(message: SystemMessage): Unit = specialHandle(message)
|
||||
|
||||
override def !(message: Any)(implicit sender: ActorRef = null): Unit = message match {
|
||||
case DeadLetter(w: Watch, _, _) ⇒ sendSystemMessage(w)
|
||||
case d: DeadLetter ⇒ // do NOT form endless loops, since deadLetters will resend!
|
||||
case _ ⇒ eventStream.publish(DeadLetter(message, sender, this))
|
||||
case d: DeadLetter ⇒ specialHandle(d.message) // do NOT form endless loops, since deadLetters will resend!
|
||||
case _ ⇒ if (!specialHandle(message)) eventStream.publish(DeadLetter(message, sender, this))
|
||||
}
|
||||
|
||||
protected def specialHandle(msg: Any): Boolean = msg match {
|
||||
case w: Watch ⇒
|
||||
if (w.watchee == this && w.watcher != this) w.watcher ! Terminated(w.watchee)(stopped = false)
|
||||
|
||||
true
|
||||
case w: Unwatch ⇒ true // Just ignore
|
||||
case _ ⇒ false
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -437,15 +442,18 @@ private[akka] class DeadLetterActorRef(_provider: ActorRefProvider,
|
|||
_path: ActorPath,
|
||||
_eventStream: EventStream) extends EmptyLocalActorRef(_provider, _path, _eventStream) {
|
||||
|
||||
override def sendSystemMessage(message: SystemMessage): Unit = message match {
|
||||
case Watch(watchee, watcher) ⇒ if (watchee != this && watcher != this) watcher ! Terminated(watchee)(stopped = false)
|
||||
case _ ⇒
|
||||
override def !(message: Any)(implicit sender: ActorRef = this): Unit = message match {
|
||||
case d: DeadLetter ⇒ if (!specialHandle(d.message)) eventStream.publish(d)
|
||||
case _ ⇒ if (!specialHandle(message)) eventStream.publish(DeadLetter(message, sender, this))
|
||||
}
|
||||
|
||||
override def !(message: Any)(implicit sender: ActorRef = this): Unit = message match {
|
||||
case DeadLetter(w: Watch, _, _) ⇒ sendSystemMessage(w)
|
||||
case d: DeadLetter ⇒ eventStream.publish(d)
|
||||
case _ ⇒ eventStream.publish(DeadLetter(message, sender, this))
|
||||
override protected def specialHandle(msg: Any): Boolean = msg match {
|
||||
case w: Watch ⇒
|
||||
if (w.watchee != this && w.watcher != this) w.watcher ! Terminated(w.watchee)(stopped = false)
|
||||
|
||||
true
|
||||
case w: Unwatch ⇒ true // Just ignore
|
||||
case _ ⇒ false
|
||||
}
|
||||
|
||||
@throws(classOf[java.io.ObjectStreamException])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue