AnP/Public/ecma/Managers/SessionsManager.ecma.js

81 lines
1.8 KiB
JavaScript

"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.<number, SessionModel>} */
sessions = {};
/**
* @returns {void}
* @access private
*/
const constructor = () => {};
/**
* @param {!(Object.<string, any|null>|Array.<any|null>)} 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.<number>)} ids
* @param {!(string|Array.<string>)} 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;
})();