import { Application, ChannelService, FrontendSession, RemoterClass } from 'pinus'; export default function (app: Application) { return new BattleRemote(app); } export class BattleRemote { 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 {boolean} flag channel parameter * */ public async add(uid: string, sid: string, serverId: number, flag: boolean) { let name = `server-${serverId}`; console.log('BattleRemote add: ', name, flag); let channel = this.channelService.getChannel(name, flag); if (!!channel && !this.get(name, false).includes(uid)) { 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 * */ public async kick(uid: string, sid: string, serverId: number) { let name = `server-${serverId}`; let channel = this.channelService.getChannel(name, false); // leave channel if (!!channel) { channel.leave(uid, sid); } } }