module examples.migration; import java.util.Vector; behavior Agent implements ActorService{ Vector itinerary = new Vector(); UAL initialLocation; long initialTime; int hops; Agent() { initialLocation = this.getUAL(); itinerary.add(initialLocation); initialTime = System.currentTimeMillis(); hops = 0; standardOutput<-println("Initial Location: " + initialLocation); } void addLocation(String ual) { hops++; itinerary.add(new UAL(ual)); } void printItinerary(){ System.err.println("Current Time: " + System.currentTimeMillis()); token x = standardOutput<-println("Itinerary: "); for (int i = 0; i < itinerary.size(); i++) { standardOutput<-print("\t" + (UAL)itinerary.get(i)) : waitfor(x) @ x = standardOutput<-println(); } standardOutput<-println() : waitfor(x) @ currentContinuation; } void printTime(){ standardOutput<-println("Migrated " + hops + " times.") @ token x = standardOutput<-println("\tUAL: " + getUAL()); if (getUAL().equals(initialLocation)) { x = standardOutput<-println("Time ellapsed: "+ new Long(System.currentTimeMillis()-initialTime)) : waitfor(x) @ standardOutput<-println("Migration avg time: "+ new Long((System.currentTimeMillis()-initialTime)/hops)); } standardOutput<-println() : waitfor(x) @ currentContinuation; } public void act(String[] args) { try { Agent agent = new Agent() at (new UAN(args[0]), new UAL(args[1])); token synchToken = agent<-printItinerary(); for (int i = 2; i < args.length; i++) { agent<-migrate(args[i]) : waitfor(synchToken) @ agent<-addLocation( args[i] ) @ agent<-printItinerary() @ synchToken = agent<-printTime(); } } catch (Exception e){ standardOutput<-println(e); standardOutput<-println("Usage: java examples.migration.Agent ()*"); } } }