sdg
Version:
pomelo ts
179 lines • 11.3 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 session_1 = tslib_1.__importDefault(require("./session/session"));
class SessionService extends base_1.default {
constructor(app, opts) {
super(app, opts);
this.singleSession = opts.singleSession;
this.sessions = {};
this.uidMap = {};
}
/**
* 创建session
* @param sid socket id
* @param frontendId 当前服务器id
* @param socket
* @return {Session}
*/
create(sid, frontendId, socket) {
const session = new session_1.default(sid, frontendId, socket, this);
this.sessions[sid] = session;
return session;
}
get(sid) {
return this.sessions[sid];
}
getByUid(uid) {
return this.uidMap[uid];
}
/**
* 建立uid与session的绑定
* @param sid
* @param uid
*/
bind(sid, uid) {
const session = this.get(sid);
if (!session)
throw `session[${sid}] does not exist`;
if (session.uid) {
if (session.uid !== uid)
throw `session has already bind with ${session.uid}`;
return;
}
let sessions = this.getByUid(uid);
if (this.singleSession && sessions)
throw `singleSession is enabled, and session has already bind with uid ${uid}`;
if (!sessions)
sessions = this.uidMap[uid] = [];
if (lodash_1.default.find(sessions, s => s.id === sid))
return;
sessions.push(session);
// 通知session处理解绑事件
session.bind(uid);
}
/**
* 解绑
* @param sid
* @param uid
*/
unbind(sid, uid) {
const session = this.get(sid);
if (!session)
throw `session ${sid} dose not exist`;
if (!session.uid || session.uid !== uid)
throw `session has not bind with ${uid}`;
// 移除绑定关系
const sessions = this.getByUid(uid);
lodash_1.default.remove(sessions, s => s.id === sid);
if (sessions.length === 0)
delete this.uidMap[uid];
// 通知session处理解绑事件
session.unbind(uid);
}
/**
* 移除session
* @param sid
*/
remove(sid) {
const session = this.get(sid);
if (session) {
const uid = session.uid;
delete this.sessions[session.id];
if (!uid)
return;
const sessions = this.getByUid(uid);
if (!sessions)
return;
lodash_1.default.remove(sessions, s => s.id === sid);
if (sessions.length === 0)
delete this.uidMap[uid];
}
}
/**
* 设置信息导入session
* @param sid
* @param key
* @param val
*/
import(sid, key, val) {
const session = this.get(sid);
if (!session)
throw `session ${sid} dose not exist`;
session.set(key, val);
}
importAll(sid, settings) {
const session = this.get(sid);
if (!session)
throw `session ${sid} dose not exist`;
for (const k in settings) {
session.set(k, settings[k]);
}
}
/**
* 剔除session
* @param sid
* @param reason
*/
kickBySessionId(sid, reason) {
this.app.logger.debug('kickBySessionId', { sid, reason });
const session = this.get(sid);
session.closed(reason);
}
kick(uid, reason) {
const sessions = this.getByUid(uid);
if (sessions) {
// notify client
sessions.map(session => {
session.closed(reason);
});
}
}
/**
* 获取客户端的ip
* @param sid
*/
getClientIpBySessionId(sid) {
const session = this.get(sid);
if (!session)
return '';
return session.getClientIp();
}
/**
* 推送消息到客户端
* @param sid
* @param msg
*/
sendMsg(sid, msg) {
const session = this.get(sid);
if (!session) {
this.app.logger.warn(`Fail to send message for non-existing session, sid: ${sid}`, msg);
return;
}
this.send(session, msg);
}
sendMsgByUid(uid, msg) {
const sessions = this.getByUid(uid);
sessions.map(s => this.send(s, msg));
}
getBindedSessions() {
const sessions = [];
lodash_1.default.forOwn(this.uidMap, s => {
sessions.push(...s);
});
return sessions;
}
getSessions() {
const sessions = [];
lodash_1.default.forOwn(this.sessions, s => sessions.push(s));
return sessions;
}
send(session, msg) {
session.send(msg);
}
}
exports.default = SessionService;
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvblNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3NlcnZpY2Uvc2Vzc2lvblNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNERBQXVCO0FBRXZCLDhEQUE4QjtBQUM5Qix3RUFBd0M7QUFXeEMsTUFBcUIsY0FBZSxTQUFRLGNBQUk7SUFLOUMsWUFBWSxHQUFHLEVBQUUsSUFBSTtRQUNuQixLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLEdBQVEsRUFBRSxVQUF1QixFQUFFLE1BQXdCO1FBQ3ZFLE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUU3QixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sR0FBRyxDQUFDLEdBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFDTSxRQUFRLENBQUMsR0FBUTtRQUN0QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsR0FBUSxFQUFFLEdBQVE7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTztZ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