package org.akka.essentials.calculator;
import akka.actor.ActorRef;
import akka.actor.TypedActor;
import akka.actor.TypedActor.PostStop;
import akka.actor.TypedActor.PreStart;
import akka.actor.TypedActor.Receiver;
import akka.dispatch.Future;
import akka.dispatch.Futures;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import akka.japi.Option;
public class Calculator implements Receiver, CalculatorInt, PreStart, PostStop {
LoggingAdapter log = Logging.getLogger(TypedActor.context().system(), this);
Integer counter = 0;
// Non blocking request response
public Future<Integer> add(Integer first, Integer second) {
return Futures.successful(first + second, TypedActor.dispatcher());
}
// Non blocking request response
public Future<Integer> subtract(Integer first, Integer second) {
return Futures.successful(first - second, TypedActor.dispatcher());
}
// fire and forget
public void incrementCount() {
counter++;
}
// Blocking request response
public Option<Integer> incrementAndReturn() {
return Option.some(++counter);
}
// Allows to tap into the Actor PreStart hook
public void preStart() {
log.info("Actor Started ! ");
}
public void onReceive(Object msg, ActorRef actor) {
log.info("Received Message -> {}", msg);
}
// Allows to tap into the Actor PostStop hook
public void postStop() {
log.info("Actor Stopped ! ");
}
}