import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts'; export default function (app: Application) { return new ComBattleRemote(app); } export class ComBattleRemote { bossHp = 10000; constructor(private app: Application) { this.app = app; this.channelService = app.get('channelService'); } private channelService: ChannelService; public async create(uid: string, sid: string, name: string, flag: boolean) { console.log('comBattleRemote create: ', name, flag); let channel = this.channelService.getChannel(name, flag); if (!!channel) { 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); } /** * 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) { console.log('comBattleRemote add: ', name, flag); let channel = this.channelService.getChannel(name, flag); if (!!channel && !this.get(name, false).includes(uid)) { 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); } public async available(uid: string, sid: string, name: string, flag: boolean) { let channel = this.channelService.getChannel(name, flag); if (!!channel) { const users = this.get(name, false); if (users.includes(uid)) { console.log('不得重复加入'); return false; } } return true; } /** * 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 async hurt(uid: string, sid: string, name: string, bossHurt: number, actorHurt: [{actorId: number, actorHurt: number}]) { console.log('hurt channel name: ', name); let channelService = this.app.get('channelService'); this.bossHp -= bossHurt; let channel = channelService.getChannel(name, false); if (!!channel) { if (this.bossHp < 0) { this.bossHp = 0; } channel.pushMessage('bossHp', resResult(STATUS.SUCCESS, {bossHp: this.bossHp})); } return this.bossHp; } }