Commit 82074b07 authored by nanahira's avatar nanahira

unify clean opponent thing

parent 51b4e817
...@@ -24,16 +24,30 @@ let localLog = function (content) { ...@@ -24,16 +24,30 @@ let localLog = function (content) {
}; };
let clearUserPools = function(user) { let clearUserPools = function(user) {
let removedFromPlaying = playingPlayerPool.delete(user); let removedFromPlaying = false;
let removedFromPending = pendingPlayerPool.delete(user); let removedFromPending = false;
if (removedFromPlaying) playingPlayerOpponents.delete(user); let toClear = [user];
if (playingPlayerTimeout.has(user)) { let seen = new Set();
clearTimeout(playingPlayerTimeout.get(user)); while (toClear.length > 0) {
playingPlayerTimeout.delete(user); let currentUser = toClear.pop();
if (!currentUser || seen.has(currentUser)) continue;
seen.add(currentUser);
if (playingPlayerPool.delete(currentUser)) removedFromPlaying = true;
if (pendingPlayerPool.delete(currentUser)) removedFromPending = true;
if (playingPlayerTimeout.has(currentUser)) {
clearTimeout(playingPlayerTimeout.get(currentUser));
playingPlayerTimeout.delete(currentUser);
}
if (pendingPlayerTimeout.has(currentUser)) {
clearTimeout(pendingPlayerTimeout.get(currentUser));
pendingPlayerTimeout.delete(currentUser);
}
let opponent = playingPlayerOpponents.get(currentUser);
playingPlayerOpponents.delete(currentUser);
if (opponent) {
playingPlayerOpponents.delete(opponent);
toClear.push(opponent);
} }
if (pendingPlayerTimeout.has(user)) {
clearTimeout(pendingPlayerTimeout.get(user));
pendingPlayerTimeout.delete(user);
} }
return removedFromPlaying || removedFromPending; return removedFromPlaying || removedFromPending;
}; };
...@@ -243,6 +257,8 @@ let pair = function (userARes, userBRes, serverName) { ...@@ -243,6 +257,8 @@ let pair = function (userARes, userBRes, serverName) {
} }
options_buffer.writeUInt8(checksum & 0xFF, 0); options_buffer.writeUInt8(checksum & 0xFF, 0);
localLog(userARes.username + " and " + userBRes.username + " matched on room " + room_id); localLog(userARes.username + " and " + userBRes.username + " matched on room " + room_id);
playingPlayerOpponents.set(userARes.username, userBRes.username);
playingPlayerOpponents.set(userBRes.username, userARes.username);
for (let client of [userARes, userBRes]) { for (let client of [userARes, userBRes]) {
let buffer = new Buffer(6); let buffer = new Buffer(6);
let secret = parseInt(client.password) % 65535 + 1; let secret = parseInt(client.password) % 65535 + 1;
...@@ -343,10 +359,6 @@ let startUser = function (query) { ...@@ -343,10 +359,6 @@ let startUser = function (query) {
let userA = query.usernameA; let userA = query.usernameA;
let userB = query.usernameB; let userB = query.usernameB;
if (!userA && !userB) return; if (!userA && !userB) return;
if (userA && userB) {
playingPlayerOpponents.set(userA, userB);
playingPlayerOpponents.set(userB, userA);
}
for (let user of [userA, userB]) { for (let user of [userA, userB]) {
if (!user) continue; if (!user) continue;
let roomInfo = pendingPlayerPool.get(user); let roomInfo = pendingPlayerPool.get(user);
...@@ -367,17 +379,14 @@ let startUser = function (query) { ...@@ -367,17 +379,14 @@ let startUser = function (query) {
// 当超过时间,而 srvpro 从未通知基本服务器游戏已结束时 // 当超过时间,而 srvpro 从未通知基本服务器游戏已结束时
let timeoutUser = function(user) { let timeoutUser = function(user) {
if (playingPlayerPool.delete(user)) if (clearUserPools(user))
localLog("With timeout, user is seen as had left the game: " + user); localLog("With timeout, user is seen as had left the game: " + user);
playingPlayerOpponents.delete(user);
playingPlayerTimeout.delete(user);
}; };
// 当房间未开始而超时 // 当房间未开始而超时
let timeoutPendingUser = function(user) { let timeoutPendingUser = function(user) {
if (pendingPlayerPool.delete(user)) if (clearUserPools(user))
localLog("Pending room expired for user: " + user); localLog("Pending room expired for user: " + user);
pendingPlayerTimeout.delete(user);
}; };
// 计算预期时间 // 计算预期时间
......
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