初步加入寻宝匹配,逻辑还不全
This commit is contained in:
@@ -1,23 +1,40 @@
|
||||
import { GOOD_QUALITY } from './../consts/consts';
|
||||
import { RoleModel } from "../db/Role";
|
||||
import * as redis from 'redis';
|
||||
import * as Redis from 'redis';
|
||||
import {REDIS_KEY} from '../consts/consts'
|
||||
import { GameModel } from "../db/Game";
|
||||
import { exists } from "fs";
|
||||
import { promisifyAll } from 'bluebird';
|
||||
|
||||
// 映射 redis 接口
|
||||
declare module 'redis' {
|
||||
export interface RedisClient extends NodeJS.EventEmitter {
|
||||
hdelAsync(...args: any[]): Promise<any>;
|
||||
spopAsync(...args: any[]): Promise<any>;
|
||||
sremAsync(...args: any[]): Promise<any>;
|
||||
srandmemberAsync(...args: any[]): Promise<any>;
|
||||
}
|
||||
export interface Multi extends Commands<Multi> {
|
||||
execAsync(...args: any[]): Promise<any>;
|
||||
}
|
||||
}
|
||||
|
||||
let redisArr = 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com';
|
||||
if(process.env.NODE_ENV == 'local') {
|
||||
redisArr = '127.0.0.1';
|
||||
}
|
||||
// 创建 redis 连接
|
||||
const client = redis.createClient(6379, redisArr, {detect_buffers: true});
|
||||
client.auth('zyz_2020', (err, reply) => {
|
||||
const oldRedisClient = Redis.createClient(6379, redisArr, {detect_buffers: true});
|
||||
oldRedisClient.auth('zyz_2020', (err, reply) => {
|
||||
if (err) {
|
||||
console.log('redis err', err);
|
||||
} else {
|
||||
console.log('redis suc');
|
||||
}
|
||||
})
|
||||
client.set('hello', 'redis', redis.print);
|
||||
|
||||
// 转 promise
|
||||
const client = promisifyAll(oldRedisClient) as Redis.RedisClient;
|
||||
client.set('hello', 'redis', Redis.print);
|
||||
|
||||
/**
|
||||
* 在服务重新启动时,将信息存入redis
|
||||
@@ -118,6 +135,49 @@ function decodeScoreWithTime(num: string): number {
|
||||
return Math.floor(_num/pow);
|
||||
}
|
||||
|
||||
/**************** 寻宝相关 start */
|
||||
|
||||
// 把寻宝的玩家信息存入 redis
|
||||
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>) {
|
||||
let cmds = [];
|
||||
qualityArr.forEach(quality => {
|
||||
if (quality) {
|
||||
cmds.push(['sadd', `${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, `${roleId}:${sid}`]);
|
||||
}
|
||||
});
|
||||
const multiClient = client.multi(cmds) as Redis.Multi;
|
||||
const newMulti = promisifyAll(multiClient) as Redis.Multi;
|
||||
const res = await newMulti.execAsync();
|
||||
console.log('setTeamSearchReq: ', res);
|
||||
return res;
|
||||
}
|
||||
|
||||
// 取出 0 - 2 个某品质的匹配中玩家,并在其它品质中删除此玩家信息
|
||||
export async function getTeamSearchByQuality(quality: number) {
|
||||
// TODO: 操作不具有原子性
|
||||
const userInfos = await client.srandmemberAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, 2);
|
||||
console.log('getTeamSearchByQuality: ' + userInfos);
|
||||
if (!userInfos || !userInfos.length) return null;
|
||||
|
||||
let cmds = [];
|
||||
let res = [];
|
||||
for (let userInfo of userInfos) {
|
||||
const decodeData = `${userInfo}`.split(':');
|
||||
if (decodeData.length !== 2) return null;
|
||||
|
||||
res.push({roleId: decodeData[0], sid: decodeData[1]});
|
||||
GOOD_QUALITY.forEach((q) => {
|
||||
cmds.push(['srem', `${REDIS_KEY.COM_TEAM_SEARCH_PRE}${q}`, userInfo]);
|
||||
})
|
||||
const multiClient = client.multi(cmds) as Redis.Multi;
|
||||
const newMulti = promisifyAll(multiClient) as Redis.Multi;
|
||||
await newMulti.execAsync();
|
||||
}
|
||||
console.log('getTeamSearchByQuality res: ', res);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**************** 寻宝相关 end */
|
||||
|
||||
////// redis方法
|
||||
|
||||
|
||||
Reference in New Issue
Block a user