"use strict"; import {Utils} from "../Utils/Utils.ecma.js"; /** * @typedef {import("../Application/AnP.ecma.js").AnP} AnP */ /** * @callback anp_thread_model_callback * @param {ThreadModel} thread * @returns {void} */ /** * @class * @constructor * @param {!AnP} anp * @param {!(Object.|Array.)} inputs * @access public */ export const ThreadModel = (function(){ /** * @constructs ThreadModel * @param {!AnP} anp * @param {!anp_thread_model_callback} callback * @param {!(Object.|Array.)} [inputs = null] * @access private */ const ThreadModel = function(anp, callback, inputs = null){ /** @type {ThreadModel} */ const self = this; /** @type {anp_thread_model_callback} */ this.callback = callback; /** @type {number} */ this.timer = anp.settings.get(["threads_timer", "timer"], inputs, 0); /** @type {boolean} */ this.bucle = anp.settings.get(["threads_bucle", "bucle"], inputs, true); /** @type {number} */ this.last_date = anp.settings.get(["threads_start_now", "start_now"], inputs, true) ? 0 : Date.now(); /** @type {number} */ this.i = -1; /** @type {boolean} */ this.working = anp.settings.get(["threads_working", "working"], inputs, true); /** * @returns {void} * @access public */ this.try_execute = () => { if(!self.working || self.i < 0) return; /** @type {number} */ const date = Date.now(); if(date - self.last_date > self.timer){ self.last_date = date; Utils.execute(self.callback, self); }; }; /** * @returns {void} * @access public */ this.play = () => { working = true; }; /** * @returns {void} * @access public */ this.stop = () => { working = false; }; }; return ThreadModel; })();