diff --git a/src/be/jeffcheasey88/peeratcode/Main.java b/src/be/jeffcheasey88/peeratcode/Main.java index 22e098e..cd7d4fe 100644 --- a/src/be/jeffcheasey88/peeratcode/Main.java +++ b/src/be/jeffcheasey88/peeratcode/Main.java @@ -30,6 +30,7 @@ import be.jeffcheasey88.peeratcode.routes.PlayerDetails; import be.jeffcheasey88.peeratcode.routes.PuzzleElement; import be.jeffcheasey88.peeratcode.routes.PuzzleResponse; import be.jeffcheasey88.peeratcode.routes.Result; +import be.jeffcheasey88.peeratcode.routes.admins.DynamicLogs; import be.jeffcheasey88.peeratcode.routes.groups.GroupCreate; import be.jeffcheasey88.peeratcode.routes.groups.GroupJoin; import be.jeffcheasey88.peeratcode.routes.groups.GroupList; @@ -53,8 +54,6 @@ public class Main{ router.setDefault((matcher, user, reader, writer) -> { writer.response(404, "Access-Control-Allow-Origin: *"); writer.write("404 not Found.\n"); - writer.flush(); - writer.close(); }); router.register(new Response(){ @@ -82,6 +81,8 @@ public class Main{ router.register(new ChangePassword(repo)); router.register(new ForgotPassword()); + router.register(new DynamicLogs(repo, new Locker<>())); //to change + router.register(new ChapterElement(repo)); router.register(new ChapterList(repo)); router.register(new PuzzleElement(repo)); @@ -91,14 +92,12 @@ public class Main{ router.register(new BadgeDetails(repo)); Locker groupLock = new Locker<>(); - router.register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes())); - - DynamicLeaderboard dlb = new DynamicLeaderboard(repo); - router.register(dlb); - - Locker leaderboard = dlb.getLocker(); + Locker leaderboard = new Locker<>(); + router.register(new DynamicLeaderboard(repo, leaderboard)); router.register(new PuzzleResponse(repo, config.getUsersFiles(), leaderboard)); + + router.register(new GroupCreate(repo, groupLock, config.getGroupJoinMinutes())); router.register(new GroupList(repo)); router.register(new GroupJoin(repo, config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard)); router.register(new GroupQuit(repo, config.getGroupJoinMinutes(), leaderboard)); diff --git a/src/be/jeffcheasey88/peeratcode/routes/DynamicLeaderboard.java b/src/be/jeffcheasey88/peeratcode/routes/DynamicLeaderboard.java index c14f641..5853ad5 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/DynamicLeaderboard.java +++ b/src/be/jeffcheasey88/peeratcode/routes/DynamicLeaderboard.java @@ -16,13 +16,9 @@ public class DynamicLeaderboard extends Leaderboard{ private Locker locker; - public DynamicLeaderboard(DatabaseRepository databaseRepo){ + public DynamicLeaderboard(DatabaseRepository databaseRepo, Locker locker){ super(databaseRepo); - this.locker = new Locker<>(); - } - - public Locker getLocker(){ - return this.locker; + this.locker = locker; } @RouteDoc(path = "/rleaderboard/{id}", responseCode = 101, responseDescription = "WebSocket") diff --git a/src/be/jeffcheasey88/peeratcode/routes/admins/DynamicLogs.java b/src/be/jeffcheasey88/peeratcode/routes/admins/DynamicLogs.java new file mode 100644 index 0000000..0e5eff7 --- /dev/null +++ b/src/be/jeffcheasey88/peeratcode/routes/admins/DynamicLogs.java @@ -0,0 +1,49 @@ +package be.jeffcheasey88.peeratcode.routes.admins; + +import java.util.regex.Matcher; + +import org.json.simple.JSONObject; + +import be.jeffcheasey88.peeratcode.framework.HttpReader; +import be.jeffcheasey88.peeratcode.framework.HttpWriter; +import be.jeffcheasey88.peeratcode.framework.Locker; +import be.jeffcheasey88.peeratcode.framework.Response; +import be.jeffcheasey88.peeratcode.framework.Route; +import be.jeffcheasey88.peeratcode.framework.User; +import be.jeffcheasey88.peeratcode.framework.Locker.Key; +import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; + +public class DynamicLogs implements Response{ + + private Locker locker; //Context + private DatabaseRepository repo; + + public DynamicLogs(DatabaseRepository repo, Locker locker){ + this.repo = repo; + this.locker = locker; + } + + @Route(path = "^/admin/logs$", needLogin = true, websocket = true) + public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { + //check if admin + + Key key = new Key(); + + locker.init(key); + try { + while(!reader.isClosed()){ + Object instance = locker.getValue(key); + JSONObject json = new JSONObject(); + writer.write(json.toJSONString()); + writer.flush(); + locker.lock(key); + } + }catch(Exception e){ + e.printStackTrace(); + } + locker.remove(key); + } + + + +}