Commit 51b4e817 authored by nanahira's avatar nanahira

clear both pools when needed

parent 86c997c4
......@@ -23,6 +23,21 @@ let localLog = function (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) {
const host = req.headers && req.headers.host ? req.headers.host : 'localhost'
const urlObj = new URL(req.url, 'http://' + host)
......@@ -316,10 +331,8 @@ let finishUser = function (json) {
if (!userB && playingPlayerOpponents.has(userA)) userB = playingPlayerOpponents.get(userA);
for (let user of [userA, userB]) {
if (!user) continue;
if (!playingPlayerPool.delete(user))
if (!clearUserPools(user))
localLog("Unknown player left the game: " + user);
clearTimeout(playingPlayerTimeout.get(user));
playingPlayerTimeout.delete(user);
}
localLog("Player " + userA + " and " + userB + " finished the game.");
};
......@@ -519,16 +532,19 @@ let endClearResponse = function(query, res) {
let arena_info = config.servers[arena];
if (arena_info == null || arena_info == undefined)
return notFoundResponse(res);
let shadow_pool = new Map(playingPlayerPool)
let count = 0;
for (let [iterate_user, iterate_info] of shadow_pool.entries()) {
if (iterate_user != "*" && iterate_user != user) continue;
if (iterate_info.address == arena_info && iterate_info.port == arena_info.port) {
playingPlayerPool.delete(iterate_user);
playingPlayerOpponents.delete(iterate_user);
count += 1;
let clearFromPool = function (pool) {
let shadow_pool = new Map(pool);
for (let [iterate_user, iterate_info] of shadow_pool.entries()) {
if (iterate_user != "*" && iterate_user != user) continue;
if (iterate_info.address == arena_info.address && iterate_info.port == arena_info.port) {
if (clearUserPools(iterate_user))
count += 1;
}
}
}
};
clearFromPool(playingPlayerPool);
clearFromPool(pendingPlayerPool);
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