寻宝:将查询匹配和删除匹配信息分离;添加部分注释
This commit is contained in:
@@ -140,6 +140,8 @@ export class ComBattleHandler {
|
|||||||
topFiveCe = reduceCe(topFiveCe);
|
topFiveCe = reduceCe(topFiveCe);
|
||||||
if (topFiveCe < ceLimit) continue;
|
if (topFiveCe < ceLimit) continue;
|
||||||
|
|
||||||
|
rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); // 匹配成功后删除redis中该用户的匹配记录
|
||||||
|
|
||||||
let isFrd = await getFrd(roleId, goodData.quality);
|
let isFrd = await getFrd(roleId, goodData.quality);
|
||||||
const st = new RoleStatus(roleId, roleName, false, isFrd, headHid, sHid, topFiveCe, lv);
|
const st = new RoleStatus(roleId, roleName, false, isFrd, headHid, sHid, topFiveCe, lv);
|
||||||
|
|
||||||
@@ -663,7 +665,7 @@ export class ComBattleHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 客户端给服务器的战斗结束通知-deprecated
|
* ! 客户端给服务器的战斗结束通知-deprecated
|
||||||
* @param msg
|
* @param msg
|
||||||
* @param session
|
* @param session
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -218,20 +218,38 @@ export async function removeFromRank(key: string, serverId: number, myId: string
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 拼接匹配分组的 key
|
* @description 拼接匹配分组的 key
|
||||||
* @param {number} quality
|
* @param {number} quality 品质
|
||||||
* @param {number} lvRange
|
* @param {number} lvRange 等级范围
|
||||||
*/
|
*/
|
||||||
function getComTeamKey(quality: number, lvRange: number) {
|
function getComTeamKey(quality: number, lvRange: number) {
|
||||||
return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${quality}_${lvRange}`;
|
return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${quality}_${lvRange}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 把寻宝的玩家信息存入 redis
|
/**
|
||||||
|
* @description 拼接匹配分组中 member 的值
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {string} sid connector serverId
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
function getComTeamValue(roleId: string, sid: string) {
|
||||||
|
return `${roleId}:${sid}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 把寻宝的玩家信息存入 redis
|
||||||
|
* @export
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {string} sid
|
||||||
|
* @param {Array<number>} qualityArr
|
||||||
|
* @param {number} lvRange
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let cmds = [];
|
let cmds = [];
|
||||||
qualityArr.forEach(quality => {
|
qualityArr.forEach(quality => {
|
||||||
if (quality) {
|
if (quality) {
|
||||||
cmds.push(['sadd', getComTeamKey(quality, lvRange), `${roleId}:${sid}`]);
|
cmds.push(['sadd', getComTeamKey(quality, lvRange), getComTeamValue(roleId, sid)]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const multiClient = client.multi(cmds) as Redis.Multi;
|
const multiClient = client.multi(cmds) as Redis.Multi;
|
||||||
@@ -241,17 +259,24 @@ export async function setTeamSearchReq(roleId: string, sid: string, qualityArr:
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 取出 0 - 2 个某品质的匹配中玩家,并在其它品质中删除此玩家信息
|
/**
|
||||||
|
* @description 从匹配队列中删除某个用户
|
||||||
|
* @export
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {string} sid
|
||||||
|
* @param {Array<number>} qualityArr
|
||||||
|
* @param {number} lvRange
|
||||||
|
*/
|
||||||
export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
||||||
|
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let cmds = [];
|
let cmds = [];
|
||||||
for (let q of qualityArr) {
|
for (let q of qualityArr) {
|
||||||
if (lvRange) {
|
if (lvRange) {
|
||||||
cmds.push(['srem', getComTeamKey(q, lvRange), `${roleId}:${sid}`]);
|
cmds.push(['srem', getComTeamKey(q, lvRange), getComTeamValue(roleId, sid)]);
|
||||||
} else {
|
} else {
|
||||||
for (let range of comBtlRanges()) {
|
for (let range of comBtlRanges()) {
|
||||||
cmds.push(['srem', getComTeamKey(q, range), `${roleId}:${sid}`]);
|
cmds.push(['srem', getComTeamKey(q, range), getComTeamValue(roleId, sid)]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -260,6 +285,13 @@ export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: A
|
|||||||
await newMulti.execAsync();
|
await newMulti.execAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 在寻宝匹配队列中随机两个玩家
|
||||||
|
* @export
|
||||||
|
* @param {number} quality 队伍品质
|
||||||
|
* @param {number} lvRange 等级范围
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
// TODO: 操作不具有原子性
|
// TODO: 操作不具有原子性
|
||||||
@@ -267,24 +299,25 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
|||||||
console.log('getTeamSearchByQuality: ' + userInfos);
|
console.log('getTeamSearchByQuality: ' + userInfos);
|
||||||
if (!userInfos || !userInfos.length) return null;
|
if (!userInfos || !userInfos.length) return null;
|
||||||
|
|
||||||
let cmds = [];
|
|
||||||
let res = [];
|
let res = [];
|
||||||
for (let userInfo of userInfos) {
|
for (let userInfo of userInfos) {
|
||||||
const decodeData = `${userInfo}`.split(':');
|
const decodeData = `${userInfo}`.split(':');
|
||||||
if (decodeData.length !== 2) return null;
|
if (decodeData.length !== 2) return null;
|
||||||
|
|
||||||
res.push({roleId: decodeData[0], sid: decodeData[1]});
|
res.push({roleId: decodeData[0], sid: decodeData[1]});
|
||||||
COM_BTL_QUALITY.forEach((q) => {
|
|
||||||
cmds.push(['srem', getComTeamKey(q, lvRange), userInfo]);
|
|
||||||
})
|
|
||||||
const multiClient = client.multi(cmds) as Redis.Multi;
|
|
||||||
const newMulti = promisifyAll(multiClient) as Redis.Multi;
|
|
||||||
await newMulti.execAsync();
|
|
||||||
}
|
}
|
||||||
console.log('getTeamSearchByQuality res: ', res);
|
console.log('getTeamSearchByQuality res: ', res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 检查玩家是否在某个队列中等待寻宝匹配
|
||||||
|
* @export
|
||||||
|
* @param {string} roleId
|
||||||
|
* @param {string} sid
|
||||||
|
* @param {Array<number>} qualityArr
|
||||||
|
* @param {number} lvRange
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
for (let quality of qualityArr) {
|
for (let quality of qualityArr) {
|
||||||
@@ -296,6 +329,10 @@ export async function checkRoleInQueue(roleId: string, sid: string, qualityArr:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description 清除所有的寻宝匹配队列
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
export async function clearComBtlQueue() {
|
export async function clearComBtlQueue() {
|
||||||
const client: Redis.RedisClient = pinus.app.get('redis');
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
for (let q of COM_BTL_QUALITY) {
|
for (let q of COM_BTL_QUALITY) {
|
||||||
|
|||||||
Reference in New Issue
Block a user