diff --git a/game-server/app/servers/battle/handler/guildHandler.ts b/game-server/app/servers/battle/handler/guildHandler.ts index 338105e37..73f058740 100644 --- a/game-server/app/servers/battle/handler/guildHandler.ts +++ b/game-server/app/servers/battle/handler/guildHandler.ts @@ -1,8 +1,8 @@ import { Application, BackendSession, pinus, ChannelService } from 'pinus'; import { resResult, getRandEelm, reduceCe, getRefTime } from '../../../pubUtils/util'; -import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_DATA_NAME } from '../../../consts'; +import { STATUS, GUILD_OPERATE, GUILD_AUTH, GUILD_JOB, GUILD_APPLY_TYPE, GUILD_STRUCTURE, GUILD_REC_TYPE, GUILD_STRUCTURE_NAME, MAIL_TYPE, REDIS_KEY, GUILD_DATA_NAME, CHAT_SERVER } from '../../../consts'; import { UserGuildModel } from '../../../db/UserGuild'; -import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, message, settleGuildWeekly } from '../../../services/guildService'; +import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, addActive, settleGuildWeekly } from '../../../services/guildService'; import { GuildModel, GuildType } from '../../../db/Guild'; import { RoleModel, RoleType } from '../../../db/Role'; import { ARMY } from '../../../pubUtils/dicParam'; @@ -74,11 +74,11 @@ export class GuildHandler { let rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code); // 加入channel - message.enterChannel(guild.code, roleId, sid); + this.app.rpc.chat.guildRemote.enterChannel.toServer(CHAT_SERVER, guild.code, roleId, sid); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, guild.code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); // 返回 const result = { ...guild, rank, myInfo: { ...userGuild, isOnline: true}}; @@ -123,7 +123,7 @@ export class GuildHandler { const select = ['code', 'name', 'notice', 'introduce', 'ceLimit', 'isAuto', 'icon']; const guild = await GuildModel.updateInfo(code, { name, notice, introduce, ceLimit, isAuto }, {}, select.join(' ')); - message.updateInfo(code, { name, notice, introduce, ceLimit, isAuto }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { name, notice, introduce, ceLimit, isAuto }); await redisUserInfoUpdate(REDIS_KEY.GUILD_INFO, code, [{ field: 'name', value: name }]); // 返回 @@ -213,17 +213,18 @@ export class GuildHandler { // 添加动态 if(auth == GUILD_AUTH.MANAGER) { const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_MANAGER, [role.roleName]); - message.updateInfo(code, { managerCnt: guild.managerCnt }); - message.addRec(rec); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { managerCnt: guild.managerCnt }); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); await sendMail(MAIL_TYPE.GUILD_BE_SET_MANAGER, memberRoleId, roleName, [guild.name]); } else if (auth == GUILD_AUTH.LEADER) { const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.SET_LEADER, [roleName, role.roleName]); - message.changeLeader(code, guild.managerCnt, role, roleId); - message.addRec(rec); + this.app.rpc.chat.guildRemote.changeLeader.toServer(CHAT_SERVER, code, guild.managerCnt, role, roleId); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); + await sendMail(MAIL_TYPE.GUILD_BE_SET_LEADER, memberRoleId, roleName, [guild.name]); } else { - message.updateInfo(code, { managerCnt: guild.managerCnt }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER,code, { managerCnt: guild.managerCnt }); await sendMail(MAIL_TYPE.GUILD_BE_SET_MEMBER, memberRoleId, roleName, [guild.name]); } @@ -261,7 +262,9 @@ export class GuildHandler { let leaderIsOnline = await isRoleOnline(guild.leader.roleId); // 打开公会页面,加入channel - message.enterChannel(userGuild.guildCode, roleId, sid); + if(userGuild.guildCode) { + this.app.rpc.chat.guildRemote.enterChannel.toServer(CHAT_SERVER, userGuild.guildCode, roleId, sid); + } // 获取排行榜 const rank = await getMyRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, guild.code); @@ -311,8 +314,8 @@ export class GuildHandler { // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [roleName]); // 更新人数增加 - message.updateInfo(code, { memberCnt: joinResult.memberCnt }); - message.addRec(rec); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt }); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); hasGuild = true; } else { // 不自动加入,插入申请表 @@ -368,10 +371,10 @@ export class GuildHandler { if(joinResult.status == 0) continue; // 更新人数增加 - message.updateInfo(code, { memberCnt: joinResult.memberCnt }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt }); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); roleIds.push(roleId); } @@ -489,10 +492,10 @@ export class GuildHandler { } // 更新人数增加 - message.updateInfo(code, { memberCnt: joinResult.memberCnt }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { memberCnt: joinResult.memberCnt }); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.JOIN_GUILD, [joinResult.roleName]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER, rec); code = guild.code; } @@ -567,7 +570,7 @@ export class GuildHandler { // 删除channel - message.dismiss(code); + this.app.rpc.chat.guildRemote.dismiss.toServer(CHAT_SERVER,code); await removeFromRank(REDIS_KEY.GUILD_ACTIVE_RANK, serverId, code); return resResult(STATUS.SUCCESS, { code, status: guild.status }); @@ -597,8 +600,8 @@ export class GuildHandler { // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [roleName]); - message.addRec(rec); - message.memberQuit(code, roleId, guild, sid); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); + this.app.rpc.chat.guildRemote.memberQuit.toServer(CHAT_SERVER,code, roleId, guild, sid); return resResult(STATUS.SUCCESS, { hasGuild: role.hasGuild }); } @@ -629,11 +632,11 @@ export class GuildHandler { const guild = await GuildModel.quit(code, memberRoleId, serverId); if(!guild) return resResult(STATUS.GUILD_KICK_ERROR); - message.memberQuit(code, roleId, guild); + this.app.rpc.chat.guildRemote.memberQuit.toServer(CHAT_SERVER,code, roleId, guild); // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.QUIT_GUILD, [role.roleName]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); await sendMail(MAIL_TYPE.GUILD_BE_KICK, memberRoleId, roleName, [guild.name]); return resResult(STATUS.SUCCESS, { memberCnt: guild.memberCnt }); @@ -685,9 +688,9 @@ export class GuildHandler { // 添加动态 const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.IMPEACH, [ oldRoleName, topUser.roleName]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); - message.changeLeader(code, guild.managerCnt, topUser, leaderRoleId); + this.app.rpc.chat.guildRemote.changeLeader.toServer(CHAT_SERVER,code, guild.managerCnt, topUser, leaderRoleId); await sendMail(MAIL_TYPE.GUILD_BE_IMPEACH, leaderRoleId, roleName, [guild.name]); await sendMail(MAIL_TYPE.GUILD_BE_SET_LEADER, topUser.roleId, roleName, [guild.name]); @@ -753,13 +756,13 @@ export class GuildHandler { const resultStructure = result.structure.find(cur => cur.id == id); // 修改信息 - message.updateInfo(code, { ...result }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER,code, { ...result }); await redisUserInfoUpdate(REDIS_KEY.GUILD_INFO, code, [{field: 'lv', value: result.lv } ]); // 添加动态 const structureName = GUILD_STRUCTURE_NAME.get(id); const rec = await GuildRecModel.createGuildRec(roleId, code, GUILD_REC_TYPE.STRUCTURE_UP, [structureName, resultStructure.lv.toString()]); - message.addRec(rec); + this.app.rpc.chat.guildRemote.addRec.toServer(CHAT_SERVER,rec); return resResult(STATUS.SUCCESS, result); } @@ -901,7 +904,7 @@ export class GuildHandler { const { guild, userGuild } = result; let { activeDaily, activeWeekly } = guild; - message.updateInfo(code, { activeDaily, activeWeekly }); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, { activeDaily, activeWeekly }); return resResult(STATUS.SUCCESS, { activeDaily, activeWeekly, myInfo: userGuild }); } @@ -918,7 +921,7 @@ export class GuildHandler { const { code, count } = msg; const guild = await GuildModel.updateInfo(code, {}, { fund: count }, 'fund'); - message.updateInfo(code, {fund: guild.fund}); + this.app.rpc.chat.guildRemote.updateInfo.toServer(CHAT_SERVER, code, {fund: guild.fund}); return resResult(STATUS.SUCCESS, { code, fund: guild.fund }); } diff --git a/game-server/app/servers/chat/remote/guildRemote.ts b/game-server/app/servers/chat/remote/guildRemote.ts new file mode 100644 index 000000000..779ab0bdb --- /dev/null +++ b/game-server/app/servers/chat/remote/guildRemote.ts @@ -0,0 +1,225 @@ +import { Application, ChannelService, FrontendSession, RemoterClass, pinus } from 'pinus'; +import { resResult } from '../../../pubUtils/util'; +import { STATUS } from '../../../consts'; +import { GuildType } from '../../../db/Guild'; +import { RoleType } from '../../../db/Role'; +import { GuildRecType } from '../../../db/GuildRec'; +import { UserGuildModel } from '../../../db/UserGuild'; + +export default function (app: Application) { + return new GuildRemote(app); +} + +export class GuildRemote { + + constructor(private app: Application) { + this.app = app; + this.channelService = app.get('channelService'); + } + + private channelService: ChannelService; + private MEMBER_QUIT = 'onMemberQuit'; + private DISMISS = 'onDismiss'; + private GUILD_INFO_UPDATE = 'onGuildInfoUpdate'; + private DEMOTION = 'onDemotion'; + private PROMOTION = 'onPromotion'; + private GUILD_REC_ADD = 'onGuildRecAdd'; + + /** + * 封装,军团相关channel名: 'guild'+guildCode + * @param guildCode 军团code + * @param create 是否创建channel + */ + private getChannel(guildCode: string, create: boolean = false) { + let channelName = `guild${guildCode}`; + let channel = this.channelService.getChannel(channelName, create); + return channel + } + + /** + * 封装,向单人发推送 + * @param guildCode 军团code + * @param path 推送地址 + * @param roleId 玩家id + * @param message 推送信息 + * @param sid 玩家服 + */ + private pushMessageByUids(guildCode: string, path: string, roleId: string, message: {code: string, roleId?: string}, sid?: string) { + + let channel = this.getChannel(guildCode); + let uids = []; + if(!sid) { + sid = channel && channel.getMember(roleId)['sid']; + } + if(sid) { + uids.push({roleId, sid}); + this.channelService.pushMessageByUids(path, resResult(STATUS.SUCCESS, message), uids); + } + return channel + } + + /** + * 封装,向channel发推送 + * @param guildCode 军团code + * @param path 推送地址 + * @param message 推送信息 + */ + private pushMessage(guildCode: string, path: string, message: any) { + let channel = this.getChannel(guildCode); + if(!!channel) { + channel.pushMessage(path, resResult(STATUS.SUCCESS, message)); + } + return channel + } + + /** + * 玩家上线 + * @param roleId 玩家id + * @param sid 玩家所在服 connector + */ + public async enterMyChannel(roleId: string, sid: string) { + let myGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); + if(!!myGuild) { + this.enterChannel(myGuild.guildCode, roleId, sid); + } + } + + /** + * 加入军团channel + * @param guildCode 军团code + * @param roleId 玩家id + * @param sid 玩家所在服 connector + */ + public enterChannel(guildCode: string, roleId: string, sid: string) { + let channel = this.getChannel(guildCode, true); + + // TODO: 后续可能添加上下线通知功能 + // let param = { + // roleId + // }; + // channel.pushMessage('onMemberAdd', resResult(STATUS.SUCCESS, param)); + + let users = channel.getMembers(); + if (users.indexOf(roleId) === -1) { + channel.add(roleId, sid); + } + } + + /** + * 玩家下线 + * @param roleId 玩家id + * @param sid 玩家所在服 connector + */ + public async leaveMyChannel(roleId: string, sid: string) { + let myGuild = await UserGuildModel.getMyGuild(roleId, 'guildCode'); + if(!!myGuild) { + this.leaveChannel(myGuild.guildCode, roleId, sid); + } + } + + /** + * 退出军团channel + * @param guildCode 军团code + * @param roleId 玩家id + * @param sid 玩家所在服 connector + */ + public leaveChannel(guildCode: string, roleId: string, sid?: string) { + let channel = this.getChannel(guildCode, false); + if(!sid) { + sid = channel && channel.getMember(roleId)['sid']; + } + // leave channel + if (!!channel) { + channel.leave(roleId, sid); + } + + // TODO: 后续可能添加上下线通知功能 + // let param = { + // roleId + // }; + // channel.pushMessage('onMemberLeave', resResult(STATUS.SUCCESS, param)); + } + + /** + * 踢出某个成员 + * @param guildCode 军团code + * @param roleId 踢出玩家roleId + * @param guild 军团信息 + * @param sid 玩家sid + */ + public memberQuit (guildCode: string, roleId: string, guild: GuildType, sid?: string) { + // 被踢出公会 + this.pushMessageByUids(guildCode, this.MEMBER_QUIT, roleId, { + code: guildCode, + roleId + }, sid); + // 更新人数减少 + this.updateInfo(guildCode, { memberCnt: guild.memberCnt }); + this.leaveChannel(guildCode, roleId, sid); + } + + /** + * 解散军团 + * @param guildCode 军团code + */ + public dismiss(guildCode: string) { + let channel = this.pushMessage(guildCode, this.DISMISS, {code: guildCode}); + if(!!channel) { + channel.destroy(); + } + } + + /** + * 更新军团信息 + * @param guildCode 军团code + * @param info 军团相关信息 + */ + public updateInfo (guildCode: string, info: any) { + this.pushMessage(guildCode, this.GUILD_INFO_UPDATE, info); + } + + /** + * 更换团长信息 + * @param guildCode 军团code + * @param managerCnt 管理员人数 + * @param newLeader 新的团长 + * @param oldLeaderId 旧团长 + */ + public changeLeader (guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) { + let { roleId, roleName, sHid, headHid, lv, quitTime } = newLeader; + this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, sHid, headHid, lv, quitTime }}); + this.demotion(guildCode, oldLeaderId); + this.promotion(guildCode, roleId); + } + + /** + * 向旧团长推送降职信息 + * @param guildCode 军团code + * @param roleId 旧团长id + */ + public demotion (guildCode: string, roleId: string) { + this.pushMessageByUids(guildCode, this.DEMOTION, roleId, { + code: guildCode + }); + } + + /** + * 向新团长推送升职信息 + * @param guildCode 军团code + * @param roleId 新团长id + */ + public promotion (guildCode: string, roleId: string) { + this.pushMessageByUids(guildCode, this.PROMOTION, roleId, { + code: guildCode + }); + } + + /** + * 添加动态 + * @param guildRecType 动态 + */ + public addRec (guildRecType: GuildRecType) { + let { guildCode, type, params, createTime } = guildRecType; + this.pushMessage(guildCode, this.GUILD_REC_ADD, {type, params, createTime}); + } +} \ No newline at end of file diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 10de6932b..c291418ad 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -14,6 +14,7 @@ import { chackFunOpenWhenLogin } from '../../../services/funcSwitchService'; import { loginRefresh } from '../../../services/playerEventService'; import { nowSeconds } from '../../../pubUtils/timeUtil'; import { getRedis, setRedis, delRedis, rmRoleFromQueue } from '../../../services/redisService'; +import { GuildModel } from '../../../db/Guild'; export default function (app: Application) { return new EntryHandler(app); } @@ -81,6 +82,7 @@ export class EntryHandler { // await self.app.rpc.battle.battleRemote.add.route(session)(role.roleId, self.app.get('serverId'), role.serverId, true); await self.app.rpc.chat.chatRemote.addWorldChannel.route(session)(role.roleId, serverId, self.app.get('serverId')); + await self.app.rpc.chat.guildRemote.enterMyChannel.route(session)(role.roleId, self.app.get('serverId')); let heros = await HeroModel.findByRole(role.roleId); let equips = await EquipModel.findbyRole(role.roleId); let items = await ItemModel.findbyRole(role.roleId); @@ -123,6 +125,7 @@ export class EntryHandler { channel.leave(roleId, sid); // this.app.rpc.battle.battleRemote.kick.route(session)(roleId, this.app.get('serverId'), serverId); this.app.rpc.chat.chatRemote.kickWorldChannel.route(session, true)(roleId, sid, serverId); + this.app.rpc.chat.guildRemote.leaveMyChannel.route(session)(roleId, sid); RoleModel.updateRoleInfo(roleId, { quitTime: nowSeconds() }); } diff --git a/game-server/app/servers/user.rpc.define.ts b/game-server/app/servers/user.rpc.define.ts index ce8705ccf..4e5b6ecd1 100644 --- a/game-server/app/servers/user.rpc.define.ts +++ b/game-server/app/servers/user.rpc.define.ts @@ -8,11 +8,13 @@ import { ComBattleRemote } from './battle/remote/comBattleRemote'; import { BattleRemote } from './battle/remote/battleRemote'; import { ConnectorRemote } from './connector/remote/connectorRemote'; import { SystimerRemote } from './systimer/remote/systimerRemote'; +import { GuildRemote } from './chat/remote/guildRemote'; declare global { interface UserRpc { chat: { chatRemote: RemoterClass; + guildRemote: RemoterClass; }; battle: { comBattleRemote: RemoterClass; diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 577066786..b83bff1f1 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -245,77 +245,3 @@ export async function settleGuildWeekly() { await SystemConfigModel.updateSystemConfig({settleGuildWeeklyTime: nowSeconds()}); // 记录一下 console.log('————— settleGuildWeekly结束 —————'); } - -export const message = { - getChannel: function(name: string, create: boolean = false) { - let channel = pinus.app.get('channelService').getChannel(name, create); - return channel - }, - enterChannel: function (guildCode: string, roleId: string, sid: string) { - // 加入channel - let channel = this.getChannel(`guild${guildCode}`, true); - let users = channel.getMembers(); - if (users.indexOf(roleId) === -1) { - channel.add(roleId, sid); - } - return channel - }, - memberQuit: function (guildCode: string, roleId: string, guild: GuildType,sid?: string) { - // 被踢出公会 - this.pushMessageByUids(`guild${guildCode}`, 'onMemberQuit', roleId, { - code: guildCode, - roleId - }, sid); - // 更新人数减少 - this.updateInfo(guildCode, { memberCnt: guild.memberCnt }); - }, - dismiss: function(guildCode: string) { - let channel = this.getChannel(`guild${guildCode}`); - if(!!channel) { - channel.pushMessage('onDismiss', resResult(STATUS.SUCCESS, { code: guildCode })); - channel.destroy(); - } - }, - updateInfo: function(guildCode: string, info: any) { - let channel = this.getChannel(`guild${guildCode}`); - if(!!channel) { - channel.pushMessage('onGuildInfoUpdate', resResult(STATUS.SUCCESS, {code: guildCode, ...info})); - } - }, - changeLeader: function(guildCode: string, managerCnt: number, newLeader: RoleType, oldLeaderId: string) { - let { roleId, roleName, sHid, headHid, lv, quitTime } = newLeader; - this.updateInfo(guildCode, {managerCnt, leader: { roleId, roleName, sHid, headHid, lv, quitTime }}); - this.demotion(guildCode, oldLeaderId); - this.promotion(guildCode, roleId); - }, - demotion: function(guildCode: string, roleId: string) { - this.pushMessageByUids(`guild${guildCode}`, 'onDemotion', roleId, { - code: guildCode - }); - }, - promotion: function(guildCode: string, roleId: string) { - this.pushMessageByUids(`guild${guildCode}`, 'onPromotion', roleId, { - code: guildCode - }); - }, - addRec: function(guildRecType: GuildRecType) { - let { guildCode, type, params, createTime } = guildRecType; - let channel = this.getChannel(`guild${guildCode}`); - if(!!channel) { - channel.pushMessage('onGuildRecAdd', resResult(STATUS.SUCCESS, {type, params, createTime})); - } - }, - pushMessageByUids: function (name: string, path: string, roleId: string, message: {code: string, roleId?: string}, sid?: string) { - - let channel = this.getChannel(name); - let uids = []; - if(!sid) { - sid = channel && channel.getMember(roleId)['sid']; - } - if(sid) { - uids.push({roleId, sid}); - pinus.app.get('channelService').pushMessageByUids(path, resResult(STATUS.SUCCESS, message), uids); - } - } - -} diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index b4a344919..2a9f046a7 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -357,4 +357,6 @@ export const MAIL_TYPE = { GUILD_ACTIVE_REWARD: 5, GUILD_BE_SET_MANAGER: 6, GUILD_BE_SET_MEMBER: 7 -}; \ No newline at end of file +}; + +export const CHAT_SERVER = 'chat-server-1'; \ No newline at end of file diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index a94b35d71..46a600da5 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -21,6 +21,15 @@ export function genCode(len) { return code; } + +export function generateNum(len: number) { + let code = ''; + for (let i = 0; i < len; i++) { + code += parseInt(`${Math.random() * 10}`); + } + return code; +} + export function decodeStr(type, str, splitForm = '|') { if (str == '&' || !str) { return []