package im.actor.runtime.actors;
import org.jetbrains.annotations.NotNull;
import im.actor.runtime.Log;
import im.actor.runtime.actors.ask.AskIntRequest;
import im.actor.runtime.actors.ask.AskMessage;
import im.actor.runtime.actors.messages.PoisonPill;
import im.actor.runtime.promise.Promise;
import im.actor.runtime.promise.PromiseFunc;
import im.actor.runtime.promise.PromiseResolver;
public abstract class ActorInterface {
@NotNull
private ActorRef dest;
public ActorInterface(@NotNull ActorRef dest) {
this.dest = dest;
}
protected ActorInterface() {
}
protected void setDest(@NotNull ActorRef ref) {
this.dest = ref;
}
@NotNull
public ActorRef getDest() {
return dest;
}
protected void send(Object message) {
dest.send(message);
}
protected <T> Promise<T> ask(@NotNull final AskMessage<T> message) {
return new Promise<>(new PromiseFunc<T>() {
@Override
public void exec(@NotNull PromiseResolver<T> executor) {
send(new AskIntRequest(message, executor));
}
});
}
public void kill() {
dest.send(PoisonPill.INSTANCE);
}
}