Newer
Older
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import com.typesafe.config.Config;
import com.typesafe.config.ConfigFactory;
import fucoin.actions.ActionInvokeLeave;
import fucoin.actions.ActionInvokeRevive;
import fucoin.actions.ActionInvokeSentMoney;
import fucoin.actions.ActionInvokeUpdate;
import fucoin.supervisor.SuperVisor;
public static void main(String[] args) throws InterruptedException {
File file = new File("application.conf");
System.out.println("config found? " + file.exists());
Config config = ConfigFactory.parseFile(file);
ActorSystem system = ActorSystem.create("Core", config);
ActorRef superVisorActor = system.actorOf(SuperVisor.props(),"SuperVisor");
List<ActorRef> activeActors = new ArrayList<ActorRef>();
ActorRef a1 = system.actorOf(Wallet.props(null,"","Main",superVisorActor),"Main");
//ActorRef a2 = system.actorOf(Wallet.props(a1,"Main","Main2",superVisorActor),"Main2");
//activeActors.add(a1);
int maxrounds = 1000;
int maxactors = 100;
for(int actor=0; actor<maxactors;actor++){
activeActors.add(system.actorOf(Wallet.props(a1,"Main","Main"+actor,superVisorActor),"Main"+actor));
}
List<List<ActorRef>> offline = new ArrayList<List<ActorRef>>();
for(int listnr=0; listnr<maxrounds;listnr++){
offline.add(new ArrayList<ActorRef>());
}
for(int timestep=0; timestep<maxrounds;timestep++){
System.out.println("timestamp:"+timestep);
List<ActorRef> removedActors = new ArrayList<ActorRef>();
for(ActorRef actor:activeActors){
if(Math.random()<0.6){
actor.tell(new ActionInvokeSentMoney("Main"+(int)Math.floor(Math.random()*10), (int) (Math.round(Math.random()*100)-50)), actor);
}
if(Math.random()<0.2){
removedActors.add(actor);
int offtime = timestep+(int)(Math.random()*6)+2;
offline.get(Math.min(offtime, maxrounds)).add(actor);
}
}
activeActors.removeAll(removedActors);
for(ActorRef actorName:offline.get(timestep)){
actorName.tell(new ActionInvokeRevive(), actorName);
activeActors.add(actorName);
}
for(ActorRef removedActor : removedActors){
removedActor.tell(new ActionInvokeLeave(), removedActor);
}
Thread.sleep(1000);
System.out.println("timestamp end:"+timestep);
System.out.println("activeActors:"+activeActors);
System.out.println("revived"+offline.get(timestep));
}
superVisorActor.tell(new ActionInvokeUpdate(), superVisorActor);