package controllers; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; import models.RegisteredUser; import play.Logger; import play.Play; import play.libs.Akka; import play.libs.F.Callback; import play.libs.F.Promise; import play.mvc.Controller; import play.mvc.Result; import scala.concurrent.duration.Duration; import actors.EventPublisher; import actors.messages.UserRegistrationEvent; import akka.actor.ActorRef; import com.fasterxml.jackson.databind.JsonNode; import external.services.TwitterOAuthService; public class Simulator extends Controller { private static List<String> twitterIds = Arrays.asList("nraychaudhuri", "mmahawar", "playframework", "springrod", "huntchr", "jroper", "derekhenninger", "StefanZeiger", "h3nk3", "chadfowler", "mabrewer7", "havocp", "Sadache", "guillaumebort", "tbjerkes", "_JamesWard", "retronym", "patriknw", "adriaanm", "rit", "jsuereth", "jamie_allen", "viktorklang", "hseeberger"); private static int counter = 0; private static final TwitterOAuthService service = new TwitterOAuthService( Play.application().configuration().getString("twitter.consumer.key"), Play.application().configuration().getString("twitter.consumer.secret")); public static Result simulateRegistration() throws Exception { Akka.system() .scheduler() .schedule(Duration.create(1, TimeUnit.SECONDS), Duration.create(10, TimeUnit.SECONDS), new Runnable() { public void run() { String twitterId = twitterIds.get(counter); fireUserRegistrationEvent(twitterId); counter++; if (counter == twitterIds.size()) { counter = 0; } } }, Akka.system().dispatcher()); return ok("done"); } private static void fireUserRegistrationEvent(String twitterId) { try { Promise<JsonNode> userProfile = service.userProfile.apply(twitterId); userProfile.onRedeem(new Callback<JsonNode>() { @Override public void invoke(JsonNode json) throws Throwable { RegisteredUser u = RegisteredUser.fromJson(json); EventPublisher.ref.tell(new UserRegistrationEvent(u), ActorRef.noSender()); } }); } catch (Throwable e) { Logger.error("Something went wrong", e); } } }