depth1

Antiflood stack

Feb 15th, 2019
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 1.17 KB | None | 0 0
  1. class Test
  2. {
  3.  
  4.     private var antiflood_stack:Array<Void->Void>;
  5.     private var antiflood_timestamp:Float = 0;
  6.     private var delay:Int;
  7.  
  8.     public function new(delay: Int) {
  9.         this.delay = delay;
  10.         antiflood_stack = new Array<Void->Void>();
  11.  
  12.         var antiflood_timer = new haxe.Timer(delay);
  13.         antiflood_timer.run = function() {
  14.             var callback = antiflood_stack.pop();
  15.  
  16.             if (callback != null){
  17.                 callback();
  18.                 antiflood_timestamp = Date.now().getTime();
  19.             }
  20.         }
  21.     }
  22.  
  23.     static function main() {
  24.         var antiflood = new Test(4000);
  25.  
  26.         var i = 0;
  27.  
  28.         antiflood.call(function() {
  29.             trace('test ${i++}');
  30.         });
  31.  
  32.         antiflood.call(function() {
  33.             trace('test ${i++}');
  34.         });
  35.         antiflood.call(function() {
  36.             trace('test ${i++}');
  37.         });
  38.         antiflood.call(function() {
  39.             trace('test ${i++}');
  40.         });
  41.     }
  42.  
  43.     public function call(func: Void->Void)
  44.     {
  45.        
  46.         if(antiflood_stack.length == 0 && (Date.now().getTime() - antiflood_timestamp) > delay)
  47.         {
  48.                 func();
  49.                 antiflood_timestamp = Date.now().getTime();
  50.         }
  51.         else
  52.         {
  53.             antiflood_stack.insert(0, func);
  54.         }
  55.     }
  56. }
Add Comment
Please, Sign In to add comment