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