package org.akka.essentials.supervisor.example3; import java.util.HashMap; import java.util.Map; import akka.actor.ActorRef; import akka.actor.Terminated; import akka.actor.UntypedActor; import akka.event.Logging; import akka.event.LoggingAdapter; public class MonitorActor extends UntypedActor { LoggingAdapter log = Logging.getLogger(getContext().system(), this); Map<ActorRef, ActorRef> monitoredActors = new HashMap<ActorRef, ActorRef>(); @Override public void onReceive(Object message) throws Exception { if (message instanceof Terminated) { final Terminated t = (Terminated) message; if (monitoredActors.containsKey(t.getActor())) { log.info("Received Worker Actor Termination Message -> {}", t .getActor().path()); log.info("Sending message to Supervisor"); monitoredActors.get(t.getActor()).tell(new DeadWorker()); } } else if (message instanceof RegisterWorker) { RegisterWorker msg = (RegisterWorker) message; getContext().watch(msg.worker); monitoredActors.put(msg.worker, msg.supervisor); } else { unhandled(message); } } }