package actions;
import models.Player;
import org.apache.commons.lang3.time.StopWatch;
import org.slf4j.MDC;
import play.Logger;
import play.Play;
import play.libs.F;
import play.mvc.Action;
import play.mvc.Http;
import play.mvc.SimpleResult;
import plugins.ShmupClient;
import java.lang.reflect.Method;
public class User extends Action.Simple {
private StopWatch stopWatch;
private Method actionMethod;
public User(Method actionMethod) {
this.actionMethod = actionMethod;
}
public static Player current() {
return (Player) Http.Context.current().args.get("user");
}
private static Player getPlayerFromCookie(Http.Context context) {
Long shmupUserId;
if (Play.isDev()) {
shmupUserId = 33489L;
} else {
Http.Cookie userId = context.request().cookie("phpbb3_axtcz_u");
if (userId == null || userId.value().equals("1")) {
return Player.guest;
}
shmupUserId = Long.parseLong(userId.value());
}
Player player = Player.findByShmupUserId(shmupUserId);
if (player == null) {
ShmupClient shmupClient = new ShmupClient();
String login = shmupClient.getLoginById(shmupUserId);
player = Player.findOrCreatePlayer(login);
player.shmupUserId = shmupUserId;
player.update();
}
return player;
}
@Override
public F.Promise<SimpleResult> call(Http.Context context) throws Throwable {
startWatch();
Player player = getPlayerFromCookie(context);
context.args.put("user", player);
mdc(context);
F.Promise<SimpleResult> call = delegate.call(context);
stopWatch();
if (player.isAuthenticated()) {
Logger.info(stopWatch.getTime() + "ms");
}
return call;
}
private void mdc(Http.Context context) {
MDC.put("user", current().name);
MDC.put("uri", context.request().uri());
}
private void stopWatch() {
stopWatch.stop();
}
private void startWatch() {
stopWatch = new StopWatch();
stopWatch.start();
}
}