import { Application, ChannelService, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; import { setGmMails, getGmMailById, getGmMails, getGmUseMails } from '../../../pubUtils/gmData/gmDataUtil'; import { MAIL_TYPE, MAIL_TEM_TYPE, MAIL_STATUS } from "../../../consts/constModules/mailConst"; import { mailData } from "../../../pubUtils/interface"; import { findWhere } from 'underscore'; import { nowSeconds } from '../../../pubUtils/timeUtil'; import { GroupMailType } from '../../../db/GroupMail'; import { MailType } from '../../../db/Mail'; import { mongoose } from '@typegoose/typegoose'; const { ObjectId } = mongoose.Types; export default function (app: Application) { new HandlerService(app, {}); return new GMRemote(app); } // rpc 定义挪到单独的定义文件(user.rpc.define.ts)。解决ts-node 有可能找不到定义的问题。 // 你也可以用其它方法解决,或者没有遇到过这个问题的话,定义还是可以放在这里。 // UserRpc的命名空间自动合并 // declare global { // interface UserRpc { // chat: { // GMRemote: RemoterClass; // }; // } // } export class GMRemote { constructor(private app: Application) { this.app = app; this.channelService = app.get('channelService'); } private channelService: ChannelService; /** * Add user into chat channel. * * @param {String} uid unique id for user * @param {String} sid server id * @param {String} name channel name * @param {boolean} flag channel parameter * */ public async add(uid: string, sid: string, name: string, flag: boolean) { let channel = this.channelService.getChannel(name, flag); let username = uid.split('*')[0]; let param = { user: username }; channel.pushMessage('onAdd', resResult(STATUS.SUCCESS, param)); if (!!channel) { channel.add(uid, sid); } return this.get(name, flag); } /** * Get user from chat channel. * * @param {Object} opts parameters for request * @param {String} name channel name * @param {boolean} flag channel parameter * @return {Array} users uids in channel * */ private get(name: string, flag: boolean) { let users: string[] = []; let channel = this.channelService.getChannel(name, flag); if (!!channel) { users = channel.getMembers(); } for (let i = 0; i < users.length; i++) { users[i] = users[i].split('*')[0]; } return users; } /** * Kick user out chat channel. * * @param {String} uid unique id for user * @param {String} sid server id * @param {String} name channel name * */ public async kick(uid: string, sid: string, name: string) { let channel = this.channelService.getChannel(name, false); // leave channel if (!!channel) { channel.leave(uid, sid); } let username = uid.split('*')[0]; let param = { user: username }; channel.pushMessage('onLeave', resResult(STATUS.SUCCESS, param)); } public refreshGmMails(mails: [any]) { setGmMails(mails); } /** * 获得据上次刷新后,可以加入的邮件 * @param updatedMailAt * @param serverId */ public getMailsByTime(updatedMailAt: number, serverId: number) { let gmMails = getGmMails(updatedMailAt, serverId); return gmMails; } // /** // * 获得可以领取的邮件奖 // * @param serverId // * @param groupMailRewards // * @param mailRewards // */ // public getUseMails(serverId: number, groupMailRewards: GroupMailType[], mailRewards: MailType[]) { // let nowTime = nowSeconds(); // let mailGoods = []; // let mails = []; // let mailIds = []; // let groupMailIds = []; // groupMailRewards.map(({_id, goods, mailId, mailTemType})=>{ // if (mailTemType == MAIL_TEM_TYPE.GMTYPE) {//gm邮件检查是否有奖励以及是否可以领取 // let gmMail = getGmMailById(mailId, serverId, nowTime); // if (!gmMail || !gmMail.goods.length|| gmMail.endTime < nowSeconds()) { // return; // } // mailGoods.push(...gmMail.goods); // } else { // if (!goods.length)//系统邮件,检查是否有奖励 // return; // mailGoods.push(...goods); // } // mails.push({id: _id, status: MAIL_STATUS.RECEIVED, mailType: MAIL_TYPE.GROUPMAIL}); // groupMailIds.push(_id); // }); // mailRewards.map(({_id, goods, mailId, mailTemType})=>{ // if (mailTemType == MAIL_TEM_TYPE.GMTYPE) {//gm邮件检查是否有奖励以及是否可以领取 // let gmMail = getGmMailById(mailId, serverId, nowTime); // if (!gmMail || !gmMail.goods.length|| gmMail.endTime < nowSeconds()) { // return; // } // mailGoods.push(...gmMail.goods); // } else { // if (!goods.length)//系统邮件,检查是否有奖励 // return; // mailGoods.push(...goods); // } // mails.push({id: _id, status: MAIL_STATUS.RECEIVED, mailType: MAIL_TYPE.SINGLEMAIL}); // mailIds.push(_id); // }); // return {mailIds, groupMailIds, mails, mailGoods}; // } /** * 通过模板mailId获得gm邮件 * @param mailId * @param serverId * @param nowTime */ public getUseGmMailById(mailId: string, serverId: number, nowTime: number) { let gmMail = getGmMailById(mailId, serverId, nowTime); return gmMail; } }