登陆:玩家在线情况redis改为hash格式

This commit is contained in:
luying
2021-03-04 14:55:08 +08:00
parent 578b890630
commit d4561c2e3d
12 changed files with 131 additions and 67 deletions
+60 -2
View File
@@ -16,6 +16,7 @@ import { comBtlRanges } from '../pubUtils/gamedata';
export async function initAllRank() {
const client: Redis.RedisClient = pinus.app.get('redis');
const serverList = await GameModel.getAllServerList();
await client.delAsync(REDIS_KEY.ONLINE_USERS);
await client.delAsync(REDIS_KEY.USER_INFO);
await client.delAsync(REDIS_KEY.GUILD_INFO);
@@ -362,12 +363,69 @@ export function redisSidKey(roleId: string) {
return `login_roleId_${roleId}`;
}
/**
* 玩家上线
* @param roleId role表id
* @param userCode user表唯一字符串标识
* @param sid connector服的那个sid
*/
export async function roleLogin(roleId: string, userCode: string, sid: string) {
const client: Redis.RedisClient = pinus.app.get('redis');
let param = { userCode, sid };
return await client.hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, JSON.stringify(param));
}
/**
* 玩家下线
* @param roleId role表id
*/
export async function roleLeave(roleId: string) {
const client: Redis.RedisClient = pinus.app.get('redis');
return await client.hdelAsync(REDIS_KEY.ONLINE_USERS, roleId);
}
/**
* 判断玩家是否在线
* @param roleId role表id
*/
export async function isRoleOnline(roleId: string) {
let key = redisSidKey(roleId);
let result = await getRedis(key);
const client: Redis.RedisClient = pinus.app.get('redis');
let result = await client.hexistsAsync(REDIS_KEY.ONLINE_USERS, roleId);
return !!result;
}
/**
* 获得在线玩家userCode和sid
* @param roleId
*/
export async function getRoleOnlineInfo(roleId: string) {
const client: Redis.RedisClient = pinus.app.get('redis');
let str = await client.hgetAsync(REDIS_KEY.ONLINE_USERS, roleId);
if(str) {
try {
let result = JSON.parse(str);
return {
isOnline: true,
userCode: result.userCode,
sid: result.sid
}
} catch(e) {
return { isOnline: false }
}
} else {
return { isOnline: false }
}
}
/**
* 获得所有在线的玩家
*/
export async function getAllOnlineRoles() {
const client: Redis.RedisClient = pinus.app.get('redis');
let allRoles = await client.hgetallAsync(REDIS_KEY.ONLINE_USERS);
return allRoles;
}
export async function resetPvpRanks() {
const client: Redis.RedisClient = pinus.app.get('redis');
await client.delAsync(REDIS_KEY.PVP_RANK);