Commit 51b4e817 authored by nanahira's avatar nanahira

clear both pools when needed

parent 86c997c4
...@@ -23,6 +23,21 @@ let localLog = function (content) { ...@@ -23,6 +23,21 @@ let localLog = function (content) {
console.log("[" + new Date().toLocaleString() + "] " + content) console.log("[" + new Date().toLocaleString() + "] " + content)
}; };
let clearUserPools = function(user) {
let removedFromPlaying = playingPlayerPool.delete(user);
let removedFromPending = pendingPlayerPool.delete(user);
if (removedFromPlaying) playingPlayerOpponents.delete(user);
if (playingPlayerTimeout.has(user)) {
clearTimeout(playingPlayerTimeout.get(user));
playingPlayerTimeout.delete(user);
}
if (pendingPlayerTimeout.has(user)) {
clearTimeout(pendingPlayerTimeout.get(user));
pendingPlayerTimeout.delete(user);
}
return removedFromPlaying || removedFromPending;
};
function parseRequestUrl(req) { function parseRequestUrl(req) {
const host = req.headers && req.headers.host ? req.headers.host : 'localhost' const host = req.headers && req.headers.host ? req.headers.host : 'localhost'
const urlObj = new URL(req.url, 'http://' + host) const urlObj = new URL(req.url, 'http://' + host)
...@@ -316,10 +331,8 @@ let finishUser = function (json) { ...@@ -316,10 +331,8 @@ let finishUser = function (json) {
if (!userB && playingPlayerOpponents.has(userA)) userB = playingPlayerOpponents.get(userA); if (!userB && playingPlayerOpponents.has(userA)) userB = playingPlayerOpponents.get(userA);
for (let user of [userA, userB]) { for (let user of [userA, userB]) {
if (!user) continue; if (!user) continue;
if (!playingPlayerPool.delete(user)) if (!clearUserPools(user))
localLog("Unknown player left the game: " + user); localLog("Unknown player left the game: " + user);
clearTimeout(playingPlayerTimeout.get(user));
playingPlayerTimeout.delete(user);
} }
localLog("Player " + userA + " and " + userB + " finished the game."); localLog("Player " + userA + " and " + userB + " finished the game.");
}; };
...@@ -519,16 +532,19 @@ let endClearResponse = function(query, res) { ...@@ -519,16 +532,19 @@ let endClearResponse = function(query, res) {
let arena_info = config.servers[arena]; let arena_info = config.servers[arena];
if (arena_info == null || arena_info == undefined) if (arena_info == null || arena_info == undefined)
return notFoundResponse(res); return notFoundResponse(res);
let shadow_pool = new Map(playingPlayerPool)
let count = 0; let count = 0;
for (let [iterate_user, iterate_info] of shadow_pool.entries()) { let clearFromPool = function (pool) {
if (iterate_user != "*" && iterate_user != user) continue; let shadow_pool = new Map(pool);
if (iterate_info.address == arena_info && iterate_info.port == arena_info.port) { for (let [iterate_user, iterate_info] of shadow_pool.entries()) {
playingPlayerPool.delete(iterate_user); if (iterate_user != "*" && iterate_user != user) continue;
playingPlayerOpponents.delete(iterate_user); if (iterate_info.address == arena_info.address && iterate_info.port == arena_info.port) {
count += 1; if (clearUserPools(iterate_user))
count += 1;
}
} }
} };
clearFromPool(playingPlayerPool);
clearFromPool(pendingPlayerPool);
res.end(`${count} user cleared.`); res.end(`${count} user cleared.`);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment