package org.akka.essentials.grid.worker;
import org.akka.essentials.grid.Task;
import org.akka.essentials.grid.TaskFinished;
import akka.actor.UntypedActor;
import akka.event.Logging;
import akka.event.LoggingAdapter;
public class WorkerActor extends UntypedActor {
LoggingAdapter log = Logging.getLogger(getContext().system(), this);
private static int instanceCounter = 0;
private static int messageProcessedCounter = 0;
@Override
public void preStart() {
instanceCounter++;
log.info("Starting WorkerActor instance #" + instanceCounter
+ ", hashcode #" + this.hashCode());
}
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof String) {
if (((String) message).compareTo("STOP") == 0) {
// used when the new routee gets added to the server
// we stop the currently running actor's on each client
getContext().stop(getSelf());
}
} else if (message instanceof Task) {
Task task = (Task) message;
// check whether we have processed enough messages
if (messageProcessedCounter == 100) {
// tell the server, enough messages for me and shut me down
getContext().stop(getSelf());
getContext().system().shutdown();
} else {
log.info("Work Packet from server->" + task.getTaskNumber());
messageProcessedCounter++;
getSender().tell(new TaskFinished(task.getTaskNumber()));
}
}
}
@Override
public void postStop() {
log.info("Stopping WorkerActor instance #" + instanceCounter
+ ", hashcode #" + this.hashCode());
instanceCounter--;
}
}