1 module dinu.loader.choiceLoader; 2 3 4 import dinu; 5 6 7 __gshared: 8 9 10 class ChoiceLoader { 11 12 protected { 13 immutable(Command)[] loaded; 14 void delegate(immutable Command) dg; 15 bool active = true; 16 } 17 18 this(){ 19 task({ 20 try 21 run; 22 catch(Exception e) 23 writeln(e); 24 }).executeInNewThread; 25 } 26 27 void each(void delegate(immutable Command) dg){ 28 synchronized(this){ 29 if(!active) 30 return; 31 foreach(c; loaded) 32 dg(c); 33 this.dg = dg; 34 } 35 } 36 37 void eachComplete(void delegate(immutable Command) dg){ 38 synchronized(this){ 39 foreach(c; loaded) 40 dg(c); 41 } 42 } 43 44 void add(immutable Command c){ 45 synchronized(this){ 46 if(!active) 47 return; 48 loaded ~= c; 49 if(dg) 50 dg(c); 51 } 52 } 53 54 void run(){ 55 } 56 57 void stop(){ 58 synchronized(this){ 59 if(!active) 60 return; 61 active = false; 62 } 63 } 64 65 } 66