排行榜:一览&领取
This commit is contained in:
@@ -1,9 +1,9 @@
|
||||
import { KeyName, KeyNameParam, RankParam, GuildRankParam, RoleRankInfo, GuildRankInfo, GuildLeader, LineupParam, myIdInter } from "../domain/rank";
|
||||
import { REDIS_RANK_TO_INFO, ROLE_SELECT, GUILD_SELECT, REDIS_KEY, REDIS_RANK_TO_EXTRA, HERO_SELECT, COMPOSE_FIELD_TYPE, KEY_TO_COMPOSE_FIELD } from "../consts";
|
||||
import { REDIS_RANK_TO_INFO, ROLE_SELECT, GUILD_SELECT, REDIS_KEY, REDIS_RANK_TO_EXTRA, HERO_SELECT, COMPOSE_FIELD_TYPE, KEY_TO_COMPOSE_FIELD, RANK_TYPE } from "../consts";
|
||||
import { redisClient, setUserInfo } from "./redisService";
|
||||
import { RoleType, RoleModel } from "../db/Role";
|
||||
import { GuildType, GuildModel } from "../db/Guild";
|
||||
import Hero, { HeroModel, HeroType } from "../db/Hero";
|
||||
import { HeroModel, HeroType } from "../db/Hero";
|
||||
import { SystemConfigModel } from "../db/SystemConfig";
|
||||
import { PvpDefenseModel } from "../db/PvpDefense";
|
||||
import { gameData } from "../pubUtils/data";
|
||||
@@ -24,13 +24,24 @@ export class Rank {
|
||||
timelen: number = 10; // 给时间位留的长度
|
||||
unionRankLife: number = 10;
|
||||
|
||||
constructor(key: string, keyParam: KeyNameParam, isUnion = false, timelen = 10, limit = 200) {
|
||||
constructor(key: string, keyParam: KeyNameParam, isUnion = false, limit = 200) {
|
||||
this.key = key;
|
||||
this.keyName = new KeyName(key, keyParam);
|
||||
this.infoKey = REDIS_RANK_TO_INFO.get(key);
|
||||
this.extraKeys = REDIS_RANK_TO_EXTRA.get(key) || [];
|
||||
this.isUnion = isUnion;
|
||||
this.timelen = timelen;
|
||||
switch (key) {
|
||||
case REDIS_KEY.TOP_LINEUP_RANK:
|
||||
case REDIS_KEY.TOP_HERO_RANK:
|
||||
case REDIS_KEY.SUM_CE_RANK:
|
||||
case REDIS_KEY.HERO_RANK:
|
||||
this.timelen = 0; break;
|
||||
case REDIS_KEY.RACE_ACTIVITY:
|
||||
this.timelen = 6; break;
|
||||
default:
|
||||
this.timelen = 10; break;
|
||||
}
|
||||
|
||||
this.limit = limit;
|
||||
}
|
||||
|
||||
@@ -80,10 +91,7 @@ export class Rank {
|
||||
public async setRankWithHeroInfo(roleId: string, hid: number, score: number, timestamp: number, hero?: HeroType, isInc = true) {
|
||||
// 如果没有信息,更新玩家信息
|
||||
for (let infoKey of [this.infoKey, ...this.extraKeys]) {
|
||||
const hasCurUser = await redisClient().hexistsAsync(infoKey, roleId);
|
||||
if (!hasCurUser) {
|
||||
await this.generParamAndSet(infoKey, { roleId, hid }, { hero });
|
||||
}
|
||||
await this.generParamAndSet(infoKey, { roleId, hid }, { hero });
|
||||
}
|
||||
let newScore = await this.setRank({ roleId, hid }, score, timestamp, isInc);
|
||||
|
||||
@@ -119,7 +127,8 @@ export class Rank {
|
||||
}
|
||||
}
|
||||
|
||||
private async generParamAndSet(infoKey: string, fields: myIdInter, db: { role?: RoleType, guild?: GuildType, hero?: HeroType }) {
|
||||
// 保存info相关数据
|
||||
public async generParamAndSet(infoKey: string, fields: myIdInter, db: { role?: RoleType, guild?: GuildType, hero?: HeroType }) {
|
||||
let { roleId, guildCode, hid } = fields;
|
||||
let { role, guild, hero } = db;
|
||||
|
||||
@@ -127,7 +136,7 @@ export class Rank {
|
||||
if (!role) {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||
}
|
||||
let param = new RankParam(role);
|
||||
let param = new RankParam(role, true);
|
||||
await this.setUserInfo(infoKey, { roleId }, param);
|
||||
} else if (infoKey == REDIS_KEY.GUILD_INFO) {
|
||||
if (!guild) {
|
||||
@@ -200,7 +209,8 @@ export class Rank {
|
||||
|
||||
private async setUserInfo(infoKey: string, myId: myIdInter, param: RankParam | GuildRankParam | LineupParam[]) {
|
||||
let field = this.composeFields(infoKey, myId);
|
||||
await setUserInfo(infoKey, field, param);
|
||||
let value = JSON.stringify(param);
|
||||
return await redisClient().hsetAsync(infoKey, field, value);
|
||||
}
|
||||
|
||||
public async setRank(myId: myIdInter, score: number, timestamp: number, isInc = false) {
|
||||
@@ -274,7 +284,7 @@ export class Rank {
|
||||
await redisClient().expireatAsync(timeKey, time);
|
||||
}
|
||||
|
||||
public async generMyRankWithRole(roleId: string, score: number, time: number, role?: RoleType) {
|
||||
public async generMyRankWithRole(roleId: string, score: number = 0, time: number = 0, role?: RoleType) {
|
||||
// 如果没有信息,更新玩家信息
|
||||
let param: RoleRankInfo;
|
||||
|
||||
@@ -283,13 +293,13 @@ export class Rank {
|
||||
if (!role) {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||
}
|
||||
param = new RoleRankInfo(role);
|
||||
param = new RoleRankInfo(role, true);
|
||||
param.setInfo(0, { roleId }, score, time);
|
||||
} else {
|
||||
const info = await redisClient().hgetAsync(this.infoKey, roleId);
|
||||
const userInfo = JSON.parse(info);
|
||||
|
||||
param = new RoleRankInfo(userInfo);
|
||||
param = new RoleRankInfo(userInfo, false);
|
||||
param.setInfo(0, { roleId }, score, time);
|
||||
}
|
||||
|
||||
@@ -334,13 +344,13 @@ export class Rank {
|
||||
if(!role) {
|
||||
role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.RANK, true);
|
||||
}
|
||||
param = new RoleRankInfo(role);
|
||||
param = new RoleRankInfo(role, true);
|
||||
param.setInfo(0, { roleId, hid }, score, time);
|
||||
} else {
|
||||
const info = await redisClient().hgetAsync(this.infoKey, roleId);
|
||||
const userInfo = JSON.parse(info);
|
||||
|
||||
param = new RoleRankInfo(userInfo);
|
||||
param = new RoleRankInfo(userInfo, false);
|
||||
param.setInfo(0, { roleId, hid }, score, time);
|
||||
}
|
||||
|
||||
@@ -353,6 +363,7 @@ export class Rank {
|
||||
|
||||
private async setExInfoToParam(extraKey: string, param: RoleRankInfo | GuildRankInfo, myId: myIdInter, db: { role?: RoleType, guild?: GuildType, hero?: HeroType }) {
|
||||
let { role, guild, hero } = db;
|
||||
|
||||
if (extraKey == REDIS_KEY.TOP_LINEUP_INFO) {
|
||||
param = <RoleRankInfo>param;
|
||||
|
||||
@@ -496,7 +507,7 @@ export class Rank {
|
||||
|
||||
let param: RoleRankInfo | GuildRankInfo;
|
||||
if (this.infoKey == REDIS_KEY.USER_INFO) {
|
||||
param = new RoleRankInfo(userInfo);
|
||||
param = new RoleRankInfo(userInfo, false);
|
||||
param.setInfo(Math.floor(ii / 2) + 1, myId, score, time);
|
||||
} else if (this.infoKey == REDIS_KEY.GUILD_INFO) {
|
||||
param = new GuildRankInfo(userInfo);
|
||||
@@ -518,6 +529,7 @@ export class Rank {
|
||||
if (this.isUnion) {
|
||||
key = await this.generateUnionRank();
|
||||
}
|
||||
console.log('**getMyRank',key, this.composeFields(this.key, myId), this.key, myId)
|
||||
let myRank = await redisClient().zrevrankAsync(key, this.composeFields(this.key, myId));
|
||||
if(!myRank && myRank != 0) {
|
||||
return 0;
|
||||
@@ -639,7 +651,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
} else if (type == REDIS_KEY.TOP_LINEUP_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await RoleModel.getRank('topLineup', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId }, false, 0);
|
||||
let r = new Rank(type, { serverId });
|
||||
for(let role of ranks) {
|
||||
// console.log(roleId);
|
||||
await r.setRankWithRoleInfo(role.roleId, role.topLineupCe, role.updatedAt.getTime(), role);
|
||||
@@ -647,7 +659,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
} else if (type == REDIS_KEY.TOP_HERO_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await HeroModel.getAllRank(serverId, HERO_SELECT.RANK_LINEUP);
|
||||
let r = new Rank(type, { serverId }, false, 0);
|
||||
let r = new Rank(type, { serverId });
|
||||
for(let hero of ranks) {
|
||||
await r.setRankWithHeroInfo(hero.roleId, hero.hid, hero.ce, hero.updatedAt.getTime(), hero);
|
||||
}
|
||||
@@ -668,7 +680,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
} else if (type == REDIS_KEY.SUM_CE_RANK) {
|
||||
let serverId = args.serverId;
|
||||
let ranks = await RoleModel.getRank('ce', serverId, ROLE_SELECT.RANK);
|
||||
let r = new Rank(type, { serverId }, false, 0);
|
||||
let r = new Rank(type, { serverId });
|
||||
for(let role of ranks) {
|
||||
await r.setRankWithRoleInfo(role.roleId, role.ce, role.updatedAt.getTime(), role);
|
||||
}
|
||||
@@ -698,7 +710,7 @@ export async function setRankRedisFromDb(type: string, args?: {serverId?: number
|
||||
|
||||
for(let hid of gameData.dicMyHeroes) {
|
||||
let ranks = await HeroModel.getRank(hid, serverId, HERO_SELECT.RANK_LINEUP);
|
||||
let r = new Rank(type, { serverId, hid }, false, 0);
|
||||
let r = new Rank(type, { serverId, hid });
|
||||
for(let hero of ranks) {
|
||||
await r.setRankWithHeroInfo(hero.roleId, hid, hero.ce, hero.updatedAt.getTime(), hero);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user