sdg
Version:
pomelo ts
100 lines • 6.39 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const lodash_1 = tslib_1.__importDefault(require("lodash"));
const channelUtil_1 = require("../../../util/channelUtil");
const constants = tslib_1.__importStar(require("../../../util/constants"));
const { INIT, DESTROYED } = constants.STATE;
class Channel {
constructor(name, channelService) {
this.channelService = channelService;
this.userAmount = 0;
this.name = name;
this.groups = {};
this.records = {};
this.state = INIT;
}
/**
* 用户加入channel
* @param uid
* @param frontendId
*/
async add(uid, frontendId) {
if (this.state > INIT)
return false;
const res = channelUtil_1.add(uid, frontendId, this.groups);
if (res) {
this.records[uid] = { uid, frontendId };
this.userAmount++;
await channelUtil_1.addToStore(this.channelService, channelUtil_1.genKey(this.channelService, this.name), channelUtil_1.genValue(frontendId, uid));
}
return res;
}
/**
* 退出channel
* @param uid
* @param frontendId
*/
async leave(uid, frontendId) {
if (!uid || !frontendId)
return false;
const res = channelUtil_1.leave(uid, frontendId, this.groups);
if (res) {
delete this.records[uid];
this.userAmount--;
await channelUtil_1.removeFromStore(this.channelService, channelUtil_1.genKey(this.channelService, this.name), channelUtil_1.genValue(frontendId, uid));
}
if (this.userAmount < 0)
this.userAmount = 0;
if (this.groups[frontendId] && this.groups[frontendId].length === 0)
delete this.groups[frontendId];
return res;
}
getUserAmount() {
return this.userAmount;
}
/**
* Get channel members.
* @return {Array} channel member uid list
*/
getMembers() {
const arr = [];
lodash_1.default.forOwn(this.groups, group => {
arr.push(...group);
});
return arr;
}
/**
* Get Member info.
*
* @param {String} uid user id
* @return {Object} member info
*/
getMember(uid) {
return this.records[uid];
}
/**
* Remove member by uid
* @param uid member to removed
*/
async removeMember(uid) {
const member = this.getMember(uid);
if (!member)
return false;
return this.leave(member.uid, member.frontendId);
}
/**
* 给当前channel所有用户发消息
* @param route
* @param msg
*/
pushMessage(route, msg) {
this.channelService.sendMessageByGroup(route, msg, this.groups);
}
async destroy() {
this.state = DESTROYED;
await this.channelService.destroyChannel(this.name);
}
}
exports.default = Channel;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21tb24vc2VydmljZS9jaGFubmVsL2NoYW5uZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQXVCO0FBSXZCLDJEQUFzRztBQUN0RywyRUFBcUQ7QUFFckQsTUFBTSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBRTVDLE1BQXFCLE9BQU87SUFRMUIsWUFBWSxJQUFZLEVBQVUsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBSHhELGVBQVUsR0FBRyxDQUFDLENBQUM7UUFJckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVEsRUFBRSxVQUF1QjtRQUNoRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXBDLE1BQU0sR0FBRyxHQUFHLGlCQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBSSxHQUFHLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixNQUFNLHdCQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxvQkFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLHNC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