diff --git a/src/be/jeffcheasey88/peeratcode/Main.java b/src/be/jeffcheasey88/peeratcode/Main.java index 5246e2e..375898a 100644 --- a/src/be/jeffcheasey88/peeratcode/Main.java +++ b/src/be/jeffcheasey88/peeratcode/Main.java @@ -10,8 +10,6 @@ import java.util.regex.Matcher; import javax.net.ssl.SSLServerSocket; import javax.net.ssl.SSLServerSocketFactory; -import be.jeffcheasey88.peeratcode.bonus.discord.Bot; -import be.jeffcheasey88.peeratcode.bonus.extract.RouteExtracter; import be.jeffcheasey88.peeratcode.framework.Client; import be.jeffcheasey88.peeratcode.framework.HttpReader; import be.jeffcheasey88.peeratcode.framework.HttpUtil; @@ -21,6 +19,7 @@ import be.jeffcheasey88.peeratcode.framework.Response; import be.jeffcheasey88.peeratcode.framework.Route; import be.jeffcheasey88.peeratcode.framework.Router; import be.jeffcheasey88.peeratcode.framework.User; +import be.jeffcheasey88.peeratcode.model.Completion; import be.jeffcheasey88.peeratcode.model.Group; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; import be.jeffcheasey88.peeratcode.routes.BadgeDetails; @@ -56,7 +55,7 @@ public class Main{ writer.close(); }); - router.register(new Response() { + router.register(new Response(){ @Route(path = "^(.*)$", type = OPTIONS) @Override public void exec(Matcher matcher, User user, HttpReader reader, HttpWriter writer) throws Exception { @@ -67,12 +66,12 @@ public class Main{ initRoutes(router, config); // RouteExtracter extracter = new RouteExtracter(router); -// extracter.extractDoc(); +// extracter.extract(); startWebServer(config, router); } - private static void initRoutes(Router router, Configuration config) { + private static void initRoutes(Router router, Configuration config){ router.register(new ChapterElement(router.getDataBase())); router.register(new ChapterList(router.getDataBase())); router.register(new PuzzleElement(router.getDataBase())); @@ -82,10 +81,6 @@ public class Main{ router.register(new Leaderboard(router.getDataBase())); router.register(new PlayerDetails(router.getDataBase())); router.register(new BadgeDetails(router.getDataBase())); - - router.register(new GroupList(router.getDataBase())); - router.register(new GroupJoin(router.getDataBase(), config.getGroupJoinMinutes(), config.getGroupQuitMinutes())); - router.register(new GroupQuit(router.getDataBase(), config.getGroupJoinMinutes())); Locker groupLock = new Locker<>(); router.register(new GroupCreate(router.getDataBase(), groupLock, config.getGroupJoinMinutes())); @@ -93,10 +88,15 @@ public class Main{ DynamicLeaderboard dlb = new DynamicLeaderboard(router.getDataBase()); router.register(dlb); - router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), dlb.getLocker())); + Locker leaderboard = dlb.getLocker(); - Bot bot = new Bot(config, router.getDataBase(), groupLock); - bot.start(); + router.register(new PuzzleResponse(router.getDataBase(), config.getUsersFiles(), leaderboard)); + router.register(new GroupList(router.getDataBase())); + router.register(new GroupJoin(router.getDataBase(), config.getGroupJoinMinutes(), config.getGroupQuitMinutes(), leaderboard)); + router.register(new GroupQuit(router.getDataBase(), config.getGroupJoinMinutes(), leaderboard)); + +// Bot bot = new Bot(config, router.getDataBase(), groupLock); +// bot.start(); } private static void startWebServer(Configuration config, Router router) throws IOException { diff --git a/src/be/jeffcheasey88/peeratcode/bonus/discord/Bot.java b/src/be/jeffcheasey88/peeratcode/bonus/discord/Bot.java index e84b629..db88cbf 100644 --- a/src/be/jeffcheasey88/peeratcode/bonus/discord/Bot.java +++ b/src/be/jeffcheasey88/peeratcode/bonus/discord/Bot.java @@ -27,6 +27,7 @@ public class Bot extends Thread{ @Override public void run(){ + if(token == null) return; try{ JDA jda = JDABuilder.createDefault(token).build(); jda.awaitReady(); diff --git a/src/be/jeffcheasey88/peeratcode/bonus/extract/RouteExtracter.java b/src/be/jeffcheasey88/peeratcode/bonus/extract/RouteExtracter.java index e205dc7..f2d3be7 100644 --- a/src/be/jeffcheasey88/peeratcode/bonus/extract/RouteExtracter.java +++ b/src/be/jeffcheasey88/peeratcode/bonus/extract/RouteExtracter.java @@ -27,7 +27,7 @@ public class RouteExtracter { Map> responses = (Map>) field.get(this.router); for(Entry> types : responses.entrySet()){ for(Entry routes : types.getValue().entrySet()){ - System.out.println("["+types.getKey()+"] "+routes.getValue().path()); + System.out.println("["+types.getKey()+"] ("+routes.getValue().needLogin()+") "+routes.getValue().path()); } } } diff --git a/src/be/jeffcheasey88/peeratcode/model/Completion.java b/src/be/jeffcheasey88/peeratcode/model/Completion.java index fb81496..aef402e 100644 --- a/src/be/jeffcheasey88/peeratcode/model/Completion.java +++ b/src/be/jeffcheasey88/peeratcode/model/Completion.java @@ -2,7 +2,7 @@ package be.jeffcheasey88.peeratcode.model; import java.util.Arrays; -public class Completion { +public class Completion{ private int puzzleId; private int playerId; private int tries; @@ -33,6 +33,11 @@ public class Completion { if (currentPuzzle != null) addTry(currentPuzzle, response); } + + @Override + public String toString(){ + return "Completion[puzzleId="+puzzleId+", userId="+playerId+",tries="+tries+",score="+score+"]"; + } public int getPuzzleId() { return puzzleId; @@ -59,6 +64,10 @@ public class Completion { } } } + + public void updatePlayer(int playerId){ + this.playerId = playerId; + } public String getFileName() { return fileName; diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java index 1ba0471..acecf51 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseQuery.java @@ -57,7 +57,7 @@ public enum DatabaseQuery { INSERT_COMPLETION( "INSERT INTO completions (fk_puzzle, fk_player, tries, code, fileName, score) values (?, ?, ?, ?, ?, ?)"), UPDATE_COMPLETION( - "UPDATE completions SET tries = ?, score = ? WHERE fk_puzzle = ? AND fk_player = ?"), + "UPDATE completions SET tries = ?, score = ?, fk_player = ? WHERE fk_puzzle = ? AND fk_player = ?"), SCORE("SELECT score FROM completions WHERE fk_player = ? AND fk_puzzle = ?"), SCORE_GROUP("SELECT c.score\r\n" + "FROM completions c\r\n" diff --git a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java index 6ae3820..09e07e8 100644 --- a/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java +++ b/src/be/jeffcheasey88/peeratcode/repository/DatabaseRepository.java @@ -567,16 +567,20 @@ public class DatabaseRepository { } public Completion insertOrUpdatePuzzleResponse(int puzzleId, int userId, String fileName, byte[] code, - byte[] response, Puzzle currentPuzzle) { + byte[] response, Puzzle currentPuzzle){ try { ensureConnection(); Completion completion = getCompletionGroup(userId, puzzleId); if (completion == null){ + System.out.println("Completion is null"); completion = new Completion(userId, puzzleId, fileName, code, response, currentPuzzle); insertCompletion(completion); } else { + System.out.println(completion); completion.addTry(currentPuzzle, response); - updateCompletion(completion); + int lastUserId = completion.getPlayerId(); + completion.updatePlayer(userId); + updateCompletion(completion, lastUserId); } return completion; } catch (SQLException e) { @@ -662,12 +666,14 @@ public class DatabaseRepository { return false; } - private void updateCompletion(Completion completionToUpdate) throws SQLException { + private void updateCompletion(Completion completionToUpdate, int user) throws SQLException{ + System.out.println("update "+completionToUpdate); PreparedStatement statement = DatabaseQuery.UPDATE_COMPLETION.prepare(this.con); statement.setInt(1, completionToUpdate.getTries()); statement.setInt(2, completionToUpdate.getScore()); - statement.setInt(3, completionToUpdate.getPuzzleId()); - statement.setInt(4, completionToUpdate.getPlayerId()); + statement.setInt(3, completionToUpdate.getPlayerId()); + statement.setInt(4, completionToUpdate.getPuzzleId()); + statement.setInt(5, user); statement.executeUpdate(); } } \ No newline at end of file diff --git a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java index 10a6900..a171f81 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java +++ b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupJoin.java @@ -11,10 +11,12 @@ import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc; import be.jeffcheasey88.peeratcode.framework.HttpReader; import be.jeffcheasey88.peeratcode.framework.HttpUtil; 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.model.Chapter; +import be.jeffcheasey88.peeratcode.model.Completion; import be.jeffcheasey88.peeratcode.model.Group; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; @@ -23,11 +25,14 @@ public class GroupJoin implements Response{ private DatabaseRepository repo; private int groupDelay; private String waitTime; + + private final Locker leaderboard; - public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime){ + public GroupJoin(DatabaseRepository repo, int groupDelay, String waitTime, Locker locker){ this.repo = repo; this.groupDelay = groupDelay; this.waitTime = waitTime; + this.leaderboard = locker; } @RouteDoc(path = "/groupJoin", responseCode = 200, responseDescription = "L'utilisateur a rejoint le groupe") @@ -64,6 +69,8 @@ public class GroupJoin implements Response{ if (this.repo.insertUserInGroup(group, user)) { HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); + + leaderboard.setValue(new Completion(0, 0, 0, null, 0)); } else { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); } diff --git a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java index ec87dc7..dadb3e3 100644 --- a/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java +++ b/src/be/jeffcheasey88/peeratcode/routes/groups/GroupQuit.java @@ -11,10 +11,12 @@ import be.jeffcheasey88.peeratcode.bonus.extract.RouteDoc; import be.jeffcheasey88.peeratcode.framework.HttpReader; import be.jeffcheasey88.peeratcode.framework.HttpUtil; 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.model.Chapter; +import be.jeffcheasey88.peeratcode.model.Completion; import be.jeffcheasey88.peeratcode.model.Group; import be.jeffcheasey88.peeratcode.repository.DatabaseRepository; @@ -22,10 +24,14 @@ public class GroupQuit implements Response{ private DatabaseRepository repo; private int groupDelay; + + private final Locker leaderboard; - public GroupQuit(DatabaseRepository repo, int groupDelay){ + public GroupQuit(DatabaseRepository repo, int groupDelay, Locker locker){ this.repo = repo; this.groupDelay = groupDelay; + + this.leaderboard = locker; } @RouteDoc(path = "/groupQuit", responseCode = 200, responseDescription = "L'utilisateur à quitter le groupe") @@ -55,6 +61,8 @@ public class GroupQuit implements Response{ if (this.repo.leaveGroup(group, user)) { HttpUtil.responseHeaders(writer, 200, "Access-Control-Allow-Origin: *"); + + leaderboard.setValue(new Completion(0, 0, 0, null, 0)); } else { HttpUtil.responseHeaders(writer, 403, "Access-Control-Allow-Origin: *"); }