Skip to content

Commit

Permalink
link leader board
Browse files Browse the repository at this point in the history
  • Loading branch information
eran0926 committed Aug 16, 2024
1 parent 0c93dc5 commit c5eb124
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 36 deletions.
36 changes: 36 additions & 0 deletions ScoreCounter/app/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,32 @@ def commit(msg):
return


def update_ranks():
update_rank(match.alliance["red"].team1, "red", match.alliance["red"].score.rankingPoints,
match.red.score.totalScoreWithPenalty, match.red.score.auto.points, match.winner)
update_rank(match.alliance["red"].team2, "red", match.alliance["red"].score.rankingPoints,
match.red.score.totalScoreWithPenalty, match.red.score.auto.points, match.winner)
update_rank(match.alliance["blue"].team1, "blue", match.alliance["blue"].score.rankingPoints,
match.blue.score.totalScoreWithPenalty, match.blue.score.auto.points, match.winner)
update_rank(match.alliance["blue"].team2, "blue", match.alliance["blue"].score.rankingPoints,
match.blue.score.totalScoreWithPenalty, match.blue.score.auto.points, match.winner)


def update_rank(team_number, alliance, rp, total_score_with_penalty, auto_score, winner):
match_times = db.get_match_times()
rank = db.get_team_rank(team_number)
rank[1] += rp
rank[2] = (rank[2]*match_times + total_score_with_penalty)/(match_times+1)
rank[3] = (rank[3]*match_times + auto_score)/(match_times+1)
if winner == "tie":
rank[6] += 0.5
if winner == alliance:
rank[4] += 1
else:
rank[5] += 1
db.update_team_rank(rank)


class ManagementSocket(Namespace):
def on_sync_match_state(self):
emit('sync_match_state', match.state)
Expand Down Expand Up @@ -277,10 +303,15 @@ def on_save_and_show(self, data):
db.change_match_state(match.level, match.id, match.state)
# TODO: save match data to database
match.end_match_settle()
if match.level == "Qualification":
update_ranks()
socketio.emit('update_rank', db.get_all_team_rank(),
namespace='/leaderboard')
match_result = match.get_match_result()
socketio.emit('reload')
# socketio.emit('show_result', to="board")
socketio.emit('show_result', match_result, to="board")
socketio.emit('show_result', match_result, to="result")
tmp = match_result.copy()
detail_data = match.get_detail_data()
tmp.extend(detail_data)
Expand Down Expand Up @@ -318,6 +349,11 @@ def on_sync_board_match_info(self):
sync_board_match_info()


class LeaderboardSocket(Namespace):
def on_connect(self):
socketio.emit('update_rank', db.get_all_team_rank())


update_board_value
if __name__ == '__main__':
app.debug = True
Expand Down
32 changes: 32 additions & 0 deletions ScoreCounter/app/module/db_operator.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,38 @@ def reset_other_loaded_match_state(self, match_level, match_id):
cur.execute(
"UPDATE match_info SET state = ? WHERE level != ? OR id != ? AND state = ?", (0, match_level, match_id, 1))

def get_match_times(self, team_number):
"""Retrieves match times from the database"""
with connect() as conn:
cur = conn.cursor()
cur.execute(
"SELECT * FROM match_result WHERE match-level = ? red-team1 = ? OR red-team2 = ? OR blue-team1 = ? OR blue-team2 = ?", (1, team_number, team_number, team_number, team_number))
return len(cur.fetchall())

def get_team_rank(self, team_number):
"""Retrieves team rank from the database"""
with connect() as conn:
cur = conn.cursor()
cur.execute(
"SELECT * FROM team_rank WHERE team_number = ?", (team_number,))
return cur.fetchone()

def update_team_rank(self, team_number, rank):
"""Update team rank in the database"""
rank = tuple(rank)
with connect() as conn:
cur = conn.cursor()
cur.execute(
"INSERT INTO rankings VALUES (team-number, ranking-points, average-points, average-auto-points, win, lose, tie) VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE ranking-points = ?, average-points = ?, average-auto-points = ?, win = ?, lose = ?, tie = ?", rank+rank)
# TODO

def get_all_team_rank(self):
"""Retrieves all team rank from the database"""
with connect() as conn:
cur = conn.cursor()
cur.execute("SELECT * FROM team_rank")
return cur.fetchall()

def save_match_data(self, match_data):
"""Save match data to the database"""
sql_query_head = "INSERT INTO match_result ("
Expand Down
62 changes: 26 additions & 36 deletions ScoreCounter/app/static/scripts/leaderboard.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,38 @@
msg = [[2401, 5, 50, 10], [2402, 8 , 50, 10], [2403, 8, 45, 5], [2404, 8, 50, 20]]
// msg = [[2401, 5, 50, 10], [2402, 8 , 50, 10], [2403, 8, 45, 5], [2404, 8, 50, 20]]

// socket = io.coneect("/leaderboard");
socket = io.coneect("/leaderboard");

// socket.on("connect", () => {
// console.log("Connected to server");
// })
socket.on("connect", () => {
console.log("Connected to server");
})

// socket.on("all_commited", function (msg) {
// msg.sort(sortFuntion);
// table = document.getElementById("leaderboard");
// table.innerHTML = "";
// msg.forEach((element, index) => {
// table.innerHTML += "<tr><td>" + toString(index+1) + "</td><td>" + element[0] + "</td><td>" + element[1] + "</td><td>" + element[2] + "</td></tr>";
// });

// })


msg.sort(sortFuntion);
table = document.getElementById("leaderboard");
table.innerHTML = "";
msg.forEach(function(element, index) {
tr = document.createElement("tr");
td = document.createElement("td");
td.setAttribute("scope", "row");
td.appendChild(document.createTextNode(index+1));
tr.appendChild(td);
element.forEach(function (value) {
socket.on("update_rank", function (msg) {
msg.sort(sortFuntion);
table = document.getElementById("leaderboard");
table.innerHTML = "";
msg.forEach(function (element, index) {
tr = document.createElement("tr");
td = document.createElement("td");
td.appendChild(document.createTextNode(value));
td.setAttribute("scope", "row");
td.appendChild(document.createTextNode(index + 1));
tr.appendChild(td);
})
table.appendChild(tr);
// console.log(element);
// console.log(index);
// table.innerHTML += "<tr><td>" + (index+1).toString() + "</td><td>" + element[0] + "</td><td>" + element[1] + "</td><td>" + element[2] + "</td></tr>";
});
element.forEach(function (value) {
td = document.createElement("td");
td.appendChild(document.createTextNode(value));
tr.appendChild(td);
})
table.appendChild(tr);
});
})



function sortFuntion(a, b) {
for (let i = 1; i < a.length ; i++){
if (a[i] == b[i]){
for (let i = 1; i < a.length; i++) {
if (a[i] == b[i]) {
continue;
} else {
return(a[0]<b[0] ? -1 : 1);
return (a[0] < b[0] ? -1 : 1);
break;
}
}
Expand Down

0 comments on commit c5eb124

Please sign in to comment.