登陆:玩家在线情况redis改为hash格式
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import { BossInstanceType, BossInstanceModel } from '../db/BossInstance';
|
||||
import { getTodayZeroPoint, nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { getTodayZeroPoint } from '../pubUtils/timeUtil';
|
||||
import { lockData } from '../services/redLockService';
|
||||
import { findIndex, indexBy, values } from 'underscore';
|
||||
import { findIndex } from 'underscore';
|
||||
import { MailModel, MailType } from '../db/Mail';
|
||||
import { getRedis, sismemberAsync, smembersAsync, saddAsync, delAsync, sremAsync, redisSidKey } from '../services/redisService';
|
||||
import { sismemberAsync, smembersAsync, saddAsync, delAsync, getRoleOnlineInfo } from '../services/redisService';
|
||||
import { pinus } from 'pinus';
|
||||
import { STATUS } from '../consts/statusCode';
|
||||
import { deepCopy, resResult } from '../pubUtils/util';
|
||||
@@ -159,12 +159,14 @@ export function getArmyBossRankReward(rankLv: number) {
|
||||
* @param roleId
|
||||
*/
|
||||
export async function addBossInstance(code: string, serverId:number, roleId: string) {
|
||||
let loginKey = redisSidKey(roleId);
|
||||
let sid = await getRedis(loginKey);
|
||||
let key = 'serverId_' + serverId + 'guildCode_' + code;
|
||||
let value = roleId+ '|' + sid;
|
||||
saddAsync(key, [value]);
|
||||
let hisOnlineInfo = await getRoleOnlineInfo(roleId);
|
||||
if(hisOnlineInfo.isOnline) {
|
||||
let key = 'serverId_' + serverId + 'guildCode_' + code;
|
||||
let value = roleId+ '|' + hisOnlineInfo.sid;
|
||||
await saddAsync(key, [value]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 给当前正在挑战的玩家下发血量同步信息
|
||||
* @param code
|
||||
@@ -194,10 +196,9 @@ export async function pushBossHpMessage(code: string, serverId:number, bossHp:nu
|
||||
* @param battleCode
|
||||
*/
|
||||
export async function checkBossBattleMemberExists(code: string, serverId:number, roleId: string, battleCode:string ) {
|
||||
let loginKey = redisSidKey(roleId);
|
||||
let sid = await getRedis(loginKey);
|
||||
let hisOnlineInfo = await getRoleOnlineInfo(roleId);
|
||||
let key = 'serverId_' + serverId + 'guildCode_' + code ;
|
||||
let value = roleId+ '|' + sid;
|
||||
let value = roleId+ '|' + hisOnlineInfo.sid;
|
||||
let flag = await sismemberAsync(key, value);
|
||||
if (!flag) {
|
||||
const battleRecord = await BattleRecordModel.getBattleRecordByCode(battleCode, true);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { RewardInter, pushMail, mailData } from "../pubUtils/interface";
|
||||
import { MailModel, MailType } from "../db/Mail";
|
||||
import { getRedis, redisSidKey } from "./redisService";
|
||||
import { getRoleOnlineInfo } from "./redisService";
|
||||
import { pinus } from "pinus";
|
||||
import { gameData } from "../pubUtils/data";
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
@@ -26,12 +26,14 @@ export async function sendMail(operate: number, toRoleId: string, sendName: stri
|
||||
if (!content)
|
||||
return;
|
||||
let mail = await MailModel.addMail({roleId: toRoleId, sendTime, goods, sendName, mailId: JSON.stringify(operate), endTime: time + nowSeconds(), mailTemType: MAIL_TEM_TYPE.GAMEMAIL, params});
|
||||
let key = redisSidKey(toRoleId);
|
||||
let sid = await getRedis(key);
|
||||
if (!!sid) {//下发邮件,对应前端红点提示
|
||||
pinus.app.channelService.pushMessageByUids('onMailsAdd', resResult(STATUS.SUCCESS, { mails:[{
|
||||
id: mail._id, goods, sendTime: mail.sendTime, endTime: mail.endTime, content, status: mail.status, mailType: MAIL_TYPE.SINGLEMAIL, sendName
|
||||
}]}), [{uid: toRoleId, sid}]);
|
||||
let hisOnlineInfo = await getRoleOnlineInfo(toRoleId);
|
||||
if(hisOnlineInfo.isOnline) {
|
||||
let sid = hisOnlineInfo.sid;
|
||||
if (!!sid) {//下发邮件,对应前端红点提示
|
||||
pinus.app.channelService.pushMessageByUids('onMailsAdd', resResult(STATUS.SUCCESS, { mails:[{
|
||||
id: mail._id, goods, sendTime: mail.sendTime, endTime: mail.endTime, content, status: mail.status, mailType: MAIL_TYPE.SINGLEMAIL, sendName
|
||||
}]}), [{uid: toRoleId, sid}]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -68,12 +70,15 @@ export async function getMailContent(roleId: string, operate: number, params: st
|
||||
return;
|
||||
const mail = Object.assign(doc.toJSON(), { roleId, goods, sendName, mailId: operate, sendTime: sendTime||nowSeconds(), mailTemType: MAIL_TEM_TYPE.GAMEMAIL, endTime: time + nowSeconds(), params });
|
||||
mails.push(mail);
|
||||
let key = redisSidKey(roleId);
|
||||
let sid = await getRedis(key);
|
||||
if (!!sid) {
|
||||
pushMessage.push({route: 'onMailsAdd', data:[{
|
||||
id: mail._id, goods, sendTime: mail.sendTime, endTime: mail.endTime, content, status: mail.status, mailType: MAIL_TYPE.SINGLEMAIL, sendName
|
||||
}], uids: [{ uid: roleId, sid }]});
|
||||
|
||||
let hisOnlineInfo = await getRoleOnlineInfo(roleId);
|
||||
if(hisOnlineInfo.isOnline) {
|
||||
let sid = hisOnlineInfo.sid;
|
||||
if (!!sid) {
|
||||
pushMessage.push({route: 'onMailsAdd', data:[{
|
||||
id: mail._id, goods, sendTime: mail.sendTime, endTime: mail.endTime, content, status: mail.status, mailType: MAIL_TYPE.SINGLEMAIL, sendName
|
||||
}], uids: [{ uid: roleId, sid }]});
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -167,10 +172,9 @@ export async function sendRolesMails(mails) {
|
||||
return;
|
||||
}
|
||||
for (let { roleId } of sendRoles) {
|
||||
let key = redisSidKey(roleId);
|
||||
let sid = await getRedis(key);
|
||||
if (!!sid) {
|
||||
uids.push({sid, uid: roleId})
|
||||
let hisOnlineInfo = await getRoleOnlineInfo(roleId);
|
||||
if(hisOnlineInfo.isOnline && hisOnlineInfo.sid) {
|
||||
uids.push({sid: hisOnlineInfo.sid, uid: roleId});
|
||||
}
|
||||
}
|
||||
pushMessage.push({route: 'onMailsAdd', data:[{
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user