omelop
Version:
[](https://travis-ci.org/node-omelop/omelop)
96 lines • 7.21 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.BufferPushScheduler = void 0;
const utils = require("../util/utils");
let DEFAULT_FLUSH_INTERVAL = 20;
class BufferPushScheduler {
constructor(app, opts) {
this.sessions = {}; // sid -> msg queue
this.tid = null;
opts = opts || {};
this.app = app;
this.flushInterval = opts.flushInterval || DEFAULT_FLUSH_INTERVAL;
}
async start() {
this.tid = setInterval(this.flush.bind(this), this.flushInterval);
}
async stop() {
if (this.tid) {
clearInterval(this.tid);
this.tid = null;
}
}
schedule(reqId, route, msg, recvs, opts, cb) {
opts = opts || {};
if (opts.type === 'broadcast') {
this.doBroadcast(msg, opts.userOptions);
}
else {
this.doBatchPush(msg, recvs);
}
process.nextTick(function () {
utils.invokeCallback(cb);
});
}
flush() {
let sessionService = this.app.get('sessionService');
let queue, session;
for (let sid in this.sessions) {
session = sessionService.get(Number(sid));
if (!session) {
continue;
}
queue = this.sessions[sid];
if (!queue || queue.length === 0) {
continue;
}
session.sendBatch(queue);
this.sessions[sid] = [];
}
}
doBroadcast(msg, opts) {
let channelService = this.app.get('channelService');
let sessionService = this.app.get('sessionService');
if (opts.binded) {
sessionService.forEachBindedSession((session) => {
if (channelService.broadcastFilter &&
!channelService.broadcastFilter(session, msg, opts.filterParam)) {
return;
}
this.enqueue(session, msg);
});
}
else {
sessionService.forEachSession((session) => {
if (channelService.broadcastFilter &&
!channelService.broadcastFilter(session, msg, opts.filterParam)) {
return;
}
this.enqueue(session, msg);
});
}
}
doBatchPush(msg, recvs) {
let sessionService = this.app.get('sessionService');
let session;
for (let i = 0, l = recvs.length; i < l; i++) {
session = sessionService.get(recvs[i]);
if (session) {
this.enqueue(session, msg);
}
}
}
enqueue(session, msg) {
let queue = this.sessions[session.id];
if (!queue) {
queue = this.sessions[session.id] = [];
session.once('closed', this.onClose.bind(this));
}
queue.push(msg);
}
onClose(session) {
delete this.sessions[session.id];
}
}
exports.BufferPushScheduler = BufferPushScheduler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3B1c2hTY2hlZHVsZXJzL2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx1Q0FBdUM7QUFLdkMsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7QUFNaEMsTUFBYSxtQkFBbUI7SUFNNUIsWUFBWSxHQUFnQixFQUFFLElBQWlDO1FBSC9ELGFBQVEsR0FBaUMsRUFBRSxDQUFDLENBQUcsbUJBQW1CO1FBQ2xFLFFBQUcsR0FBbUIsSUFBSSxDQUFDO1FBSXZCLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLHNCQUFzQixDQUFDO0lBQ3RFLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNQLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDTixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVixhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLEdBQVEsRUFBRSxLQUFZLEVBQUUsSUFBcUIsRUFBRSxFQUFjO1FBQ2hHLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVDO2FBQU07WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNqQztRQUVELE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDYixLQUFLLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3BELElBQUksS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUNuQixLQUFLLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixTQUFTO2FBQ1o7WUFFRCxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUM5QixTQUFTO2FBQ1o7WUFFRCxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUdELFdBQVcsQ0FBQyxHQUFRLEVBQUUsSUFBc0I7UUFDeEMsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM3QyxJQUFJLGNBQWMsQ0FBQyxlQUFlO29CQUM5QixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ2pFLE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsY0FBYyxDQUFDLGNBQWMsQ0FBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN2QyxJQUFJLGNBQWMsQ0FBQyxlQUFlO29CQUM5QixDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ2pFLE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFDRCxXQUFXLENBQUMsR0FBUSxFQUFFLEtBQVk7UUFDOUIsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNwRCxJQUFJLE9BQU8sQ0FBQztRQUNaLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDL0I7U0FDSjtJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZ0IsRUFBRSxHQUFRO1FBQzlCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBZ0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0o7QUF6R0Qsa0RBeUdDIn0=