1
8
9 import com.sekati.core.CoreObject;
10 import com.sekati.log.Logger;
11 import com.sekati.events.IBroadcastable;
12
13
24 class com.sekati.events.Broadcaster extends CoreObject implements IBroadcastable {
25
26 private static var _instance:Broadcaster;
27 private var _listeners:Array;
28
29
32 private function Broadcaster() {
33 super( );
34 _listeners = new Array( );
35 }
36
37
41 public static function getInstance():Broadcaster {
42 if (!_instance) _instance = new Broadcaster( );
43 return _instance;
44 }
45
46
49 public static function get $():Broadcaster {
50 return Broadcaster.getInstance( );
51 }
52
53
62 public function subscribe(o:Object):Void {
63 if (o instanceof Array) {
64 for (var i:Number = 0; i < o.length ; i++) {
65 addListener( o[i] );
66 if (typeof (o[i]) == "movieclip") {
67 o[i].onUnload = function ():Void {
68 removeListener( o[i] );
69 };
70 }
71 }
72 } else {
73 addListener( o );
74 }
75 }
76
77
85 public function unsubscribe(o:Object):Void {
86 if (o instanceof Array) {
87 for (var i:Number = 0; i < o.length ; i++) {
88 removeListener( o[i] );
89 }
90 } else {
91 removeListener( o );
92 }
93 }
94
95
99 public function reset():Void {
100 _listeners = new Array( );
101 }
102
103
108 public function broadcast():Void {
109 var e:String = String( arguments.shift( ) );
110 var a:Array = this._listeners.concat( );
111 var l:Number = a.length;
112 var m:String = "@@@ Broadcast: \"" + e + "\"";
113 Logger.$.notice( _instance, m );
114 for (var i:Number = 0; i < l ; i++) {
115 a[i][e].apply( a[i], arguments );
116 }
117 }
118
119
124 public function addListener(o:Object):Number {
125 this.removeListener( o );
126 return this._listeners.push( o );
127 }
128
129
134 public function removeListener(o:Object):Boolean {
135 var a:Array = this._listeners;
136 var i:Number = a.length;
137 while (i--) {
138 if (a[i] == o) {
139 a.splice( i, 1 );
140 return true;
141 }
142 }
143 return false;
144 }
145
146
150 public function destroy():Void {
151 delete _listeners;
152 delete _instance;
153 super.destroy( );
154 }
155 }