"use strict"; import {SessionModel} from "../Models/SessionModel.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP */ /** * @class SessionsManager * @constructor * @param {!AnP} anp * @return {void} * @access public * @static */ export const SessionsManager = (function(){ /** * @constructs SessionsManager * @param {!AnP} anp * @return {void} * @access private * @static */ const SessionsManager = function(anp){ /** @type {SessionsManager} */ const self = this, /** @type {Object.} */ sessions = {}; /** * @returns {void} * @access private */ const constructor = () => {}; /** * @param {!(Object.|Array.)} inputs * @return {number} * @access public */ this.set = inputs => { /** @type {number} */ let i; while(sessions[i = Math.random() * (1 << 28) | 0]); return (sessions[i] = new SessionModel(i, inputs)).i; }; /** * @param {!(number|Array.)} ids * @param {!(string|Array.)} permissions * @returns {boolean} * @access public */ this.check_permissions = (ids, permissions) => Common.get_array(ids).some(id => ( sessions[id] && sessions[id].check_permissions(permissions) )); /** * @param {!number} id * @returns {boolean} * @access public */ this.close = id => { if(sessions[id]){ delete sessions[id]; return true; }; return false; }; constructor(); }; return SessionsManager; })();