UNPKG

sdg

Version:

pomelo ts

120 lines 10 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const lodash_1 = tslib_1.__importDefault(require("lodash")); const base_1 = tslib_1.__importDefault(require("../../base")); const channelRemote_1 = tslib_1.__importDefault(require("../remote/frontend/channelRemote")); const channel_1 = tslib_1.__importDefault(require("./channel/channel")); const channelUtil_1 = require("../../util/channelUtil"); class ChannelService extends base_1.default { constructor(app, opts) { super(app, opts); this.channels = {}; if (opts.broadcastFilter) this.broadcastFilter = opts.broadcastFilter; this.channelRemote = new channelRemote_1.default(app); } async start() { await this.restoreChannel(); } /** * 创建channel * @param name */ async createChannel(name) { if (this.channels[name]) return this.channels[name]; const c = new channel_1.default(name, this); await channelUtil_1.addToStore(this, channelUtil_1.genKey(this), channelUtil_1.genKey(this, name)); this.channels[name] = c; return c; } async getChannel(name, create = false) { let channel = this.channels[name]; if (!channel && create) { channel = await this.createChannel(name); } return channel; } async destroyChannel(name) { delete this.channels[name]; await channelUtil_1.removeFromStore(this, channelUtil_1.genKey(this), channelUtil_1.genKey(this, name)); await channelUtil_1.removeAllFromStore(this, channelUtil_1.genKey(this, name)); } pushMessageByUids(route, msg, uids) { const groups = {}; uids.map(i => channelUtil_1.add(i.uid, i.sid, groups)); this.sendMessageByGroup(route, msg, groups); } /** * 给某组发消息 * @param route * @param msg * @param groups */ sendMessageByGroup(route, msg, groups) { const method = 'pushMessage'; lodash_1.default.forOwn(groups, (group, sid) => { if (group.length > 0) { this.sendMessage(sid, route, method, msg, group, {}); } }); } /** * 给某个类型服务器广播消息 * @param serverType * @param route * @param msg */ broadcast(serverType, route, msg) { const method = 'broadcast'; const servers = this.app.getServersByType(serverType); const opts = { type: 'broadcast', userOptions: {} }; servers.map(s => this.sendMessage(this.app.getServerId(s), route, method, msg, [], opts)); } /** * 本服务器上广播 * @param route * @param msg */ broadcastSelf(route, msg) { this.sendMessage(this.app.getServerId(), route, 'broadcast', msg, [], { type: 'broadcast', userOptions: {} }); } sendMessage(sid, route, method, msg, group, opts) { const namespace = 'sys'; const service = 'channelRemote'; // 本服,直接调用channelRemote处理 if (sid === this.app.getServerId()) { this.channelRemote[method](route, msg, group, opts); } else { this.app.rpcInvoke(sid, { namespace, service, method, args: [route, msg, group, opts] }); } } async restoreChannel() { if (!this.store) return; const list = await channelUtil_1.loadAllFromStore(this, channelUtil_1.genKey(this)); if (!list || !list.length) return; let load = async (key, name) => { let channelName = name; const items = await channelUtil_1.loadAllFromStore(this, key); items.map(item => { const [frontendId, uid] = item.split(':'); const channel = this.channels[channelName]; const res = channelUtil_1.add(uid, frontendId, channel.groups); if (res) { channel.records[uid] = { frontendId, uid }; } }); }; for (let i = 0; i < list.length; i++) { let name = list[i].slice(channelUtil_1.genKey(this).length + 1); this.channels[name] = new channel_1.default(name, this); await load(list[i], name); } } } exports.default = ChannelService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3NlcnZpY2UvY2hhbm5lbFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQXVCO0FBRXZCLDhEQUE4QjtBQUU5Qiw2RkFBNkQ7QUFXN0Qsd0VBQXdDO0FBQ3hDLHdEQUF3SDtBQUV4SCxNQUFxQixjQUFlLFNBQVEsY0FBSTtJQU85QyxZQUFZLEdBQWdCLEVBQUUsSUFBNEI7UUFDeEQsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx1QkFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSztRQUNoQixNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFZO1FBQ3JDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEQsTUFBTSxDQUFDLEdBQUcsSUFBSSxpQkFBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLHdCQUFVLENBQUMsSUFBSSxFQUFFLG9CQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsb0JBQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV4QixPQUFPLENBQUMs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