sdg
Version:
pomelo ts
120 lines • 10 kB
JavaScript
"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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