Skip to content

Commit de66fd2

Browse files
committed
hiscore pages
1 parent 60fa2b4 commit de66fd2

File tree

3 files changed

+33
-10
lines changed

3 files changed

+33
-10
lines changed

src/handlers/hiscores.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ async function getHiscoreRanks({
1414

1515
const queryHandler = this.server.queryHandler;
1616
const ranks = queryHandler.getHiscoreRanks(skill, rank, page);
17-
this.socket.sendMessage({ token, ranks });
17+
const pages = this.server.hiscorePages[skill] || 0;
18+
19+
this.socket.sendMessage({ token, ranks, pages });
1820
}
1921

2022
module.exports = { getHiscoreRanks };

src/query-handler.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,16 @@ const PLAYER_JSON_FIELDS = [
5959
];
6060

6161
const TOTAL_EXP = `(\`exp_${skills.join('` + `exp_')}\`) AS \`experience\``;
62-
const RANKS_PER_PAGE = 8;
62+
const RANKS_PER_PAGE = 4;
63+
64+
function getPages(database) {
65+
return Math.ceil(
66+
database
67+
.prepare('SELECT COUNT(1) FROM `hiscore_ranks`')
68+
.pluck()
69+
.get() / RANKS_PER_PAGE
70+
);
71+
}
6372

6473
class QueryHandler {
6574
constructor(database) {
@@ -123,11 +132,11 @@ class QueryHandler {
123132
'CREATE TEMPORARY TABLE `hiscore_ranks` ' +
124133
'(`player_id` integer, `experience` integer)',
125134
getTotalHiscoreRanks:
126-
'SELECT `username`, `rank_total` as `rank`, `total_level` AS ' +
135+
'SELECT `username`, `rank_total` AS `rank`, `total_level` AS ' +
127136
`\`level\`, ${TOTAL_EXP} FROM \`players\` ORDER BY ` +
128137
`\`rank_total\` ASC LIMIT ${RANKS_PER_PAGE} OFFSET ?`,
129138
getTotalHiscoreRanksBetween:
130-
'SELECT `username`, `rank_total` as `rank`, `total_level` AS ' +
139+
'SELECT `username`, `rank_total` AS `rank`, `total_level` AS ' +
131140
`\`level\`, ${TOTAL_EXP} FROM \`players\` WHERE ` +
132141
'`rank_total` BETWEEN ? AND ? ORDER BY `rank_total` ASC'
133142
};
@@ -151,6 +160,9 @@ class QueryHandler {
151160
'`hiscore_ranks` WHERE `hiscore_ranks`.`player_id` = ' +
152161
'`players`.`id`)'
153162
);
163+
164+
return getPages(this.database);
165+
154166
});
155167

156168
this.statements.getSkillHiscoreRanks = {};
@@ -159,7 +171,7 @@ class QueryHandler {
159171

160172
for (const skill of skills) {
161173
this.statements.getSkillHiscoreRanks[skill] = this.database.prepare(
162-
`SELECT \`username\`, \`rank_${skill}\` as \`rank\`, ` +
174+
`SELECT \`username\`, \`rank_${skill}\` AS \`rank\`, ` +
163175
`\`exp_${skill}\` AS \`experience\` FROM \`players\` ` +
164176
`ORDER BY \`rank_${skill}\` ASC LIMIT ${RANKS_PER_PAGE} ` +
165177
'OFFSET ?'
@@ -168,7 +180,7 @@ class QueryHandler {
168180
this.statements.getSkillHiscoreRanksBetween[
169181
skill
170182
] = this.database.prepare(
171-
`SELECT \`username\`, \`rank_${skill}\` as \`rank\`, ` +
183+
`SELECT \`username\`, \`rank_${skill}\` AS \`rank\`, ` +
172184
`\`exp_${skill}\` AS \`experience\` FROM \`players\` WHERE ` +
173185
`\`rank_${skill}\` BETWEEN ? AND ? ORDER BY \`rank_total\` ASC`
174186
);
@@ -191,6 +203,8 @@ class QueryHandler {
191203
'`hiscore_ranks`.`player_id` = ' +
192204
'`players`.`id`);'
193205
);
206+
207+
return getPages(this.database);
194208
}
195209
);
196210
}
@@ -337,11 +351,15 @@ class QueryHandler {
337351
}
338352

339353
updateHiscoreRanks() {
340-
this.updateTotalHiscoreRanks();
354+
const pages = {
355+
overall: this.updateTotalHiscoreRanks(),
356+
};
341357

342358
for (const skill of skills) {
343-
this.updateSkillHiscoreRanks[skill]();
359+
pages[skill] = this.updateSkillHiscoreRanks[skill]();
344360
}
361+
362+
return pages;
345363
}
346364

347365
getHiscoreRanks(skill = 'overall', rank = -1, page = 0) {
@@ -374,7 +392,7 @@ class QueryHandler {
374392
if (skill === 'overall') {
375393
ranks = this.statements.getTotalHiscoreRanks.all(offset);
376394
} else {
377-
this.statements.getSkillHiscoreRanks[skill].all(offset);
395+
ranks = this.statements.getSkillHiscoreRanks[skill].all(offset);
378396
}
379397
}
380398

src/server.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class Server {
4444
});
4545
}
4646

47+
// { skill: rankPages }
48+
this.hiscorePages = {};
49+
4750
this._updateHiscoreRanks = this.updateHiscoreRanks.bind(this);
4851
this._resetLoginAttempts = this.resetLoginAttempts.bind(this);
4952
}
@@ -88,7 +91,7 @@ class Server {
8891
log.info('updating hiscore ranks...');
8992

9093
try {
91-
this.queryHandler.updateHiscoreRanks();
94+
this.hiscorePages = this.queryHandler.updateHiscoreRanks();
9295
} catch (e) {
9396
log.error(e);
9497
}

0 commit comments

Comments
 (0)