package fucoin.actions;

import fucoin.wallet.AbstractNode;
import akka.actor.ActorRef;
import akka.actor.UntypedActorContext;

public abstract class Action<T extends AbstractNode> {
	private ActorRef self;

	public final void doAction(T abstractNode){
		this.self=abstractNode.getSelf();
		onAction(abstractNode.getSender(),abstractNode.getSelf(),abstractNode.getContext(),abstractNode);
	}

	protected abstract void onAction(ActorRef sender, ActorRef self, UntypedActorContext context, T abstractNode);
	
	public void log(String string) {
		System.out.println(self.path().name()+": "+string);
	}
	
}