-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathTimerTask.0.1.0.js
1 lines (1 loc) · 1.84 KB
/
TimerTask.0.1.0.js
1
function UUID(a,b){for(b=a="";10>=a++;b+=51*a&52?(a^15?8^Math.random()*(a^20?16:4):4).toString(16):"");return b.toUpperCase()}function len(a){if(null==a)return-1;if(a instanceof Array||"string"==typeof a)return a.length;if(a instanceof Object){var b=0,c;for(c in a)b++;return b}return 0}var TimerTask=function(){var a=0,b={},c=new Timer(100),e=function(){a=Math.round(10*(a+.1))/10;console.log(a);if(b[a]){for(var d=0;d<b[a].length;d++)b[a][d].task.apply(null,b[a][d].args),b[a][d].release();b[a]=null;delete b[a];0==len(b)&&this.stop();120<=a&&2>a%120&&0==len(b)&&this.stop()}};e.owner=this;c.setListener(e);this.release=function(){a=0;for(var d in b)b[d]=null,delete b[d];b=null;c&&(c.release(),c=null)};this.start=function(){c&&c.start()};this.stop=function(){c&&c.stop();a=0};this.setTask=function(d,e,h){for(var f=[],g=2;g<arguments.length;++g)f[g-2]=arguments[g];if(e)if(d=Math.round(10*(a+d))/10,console.log(d),d<=a)e.apply(null,f);else return f=new Task(d,e,f),b[d]||(b[d]=[]),b[d].push(f),c&&!c.isRunning&&this.start(),f.id};this.removeTask=function(a){if(a){for(var d in b){var c=b[d];if(null==c||0>=c.length)delete b[d];else for(var e=0;e<c.length;e++)if(a==c[e].id){c.splice(e,1);0>=c.length&&delete b[d];break}}0==len(b)&&this.stop()}};this.getTask=function(a){return 0>=arguments.length?b:b[a]}},Task=function(a,b,c){this.id=UUID();this.when=-1;this.args=this.task=null;this.when=a;this.task=b;this.args=c;this.release=function(){id=null;when=-1;args=task=null}},Timer=function(a){var b=-1,c=a,e=null;this.isRunning=!1;this.release=function(){this.stop();b=-1;c=0;e=null};this.setListener=function(a){if("function"!=typeof a)throw"Not a valid listener!";e=a};this.start=function(){this.isRunning||(b=setInterval(function(){e.apply(e.owner)},c),this.isRunning=!0)};this.stop=function(){clearInterval(b);this.isRunning=!1};this.reset=function(){this.stop();this.start()}};