| | 470 | } |
|---|
| | 471 | |
|---|
| | 472 | private function getEventMonitor():IMonitor |
|---|
| | 473 | { |
|---|
| | 474 | return _eventMonitor || (_eventMonitor = new Monitor()); |
|---|
| | 475 | } |
|---|
| | 476 | |
|---|
| | 477 | private function getEventHandlers():Array |
|---|
| | 478 | { |
|---|
| | 479 | return _eventHandlers || (_eventHandlers = []); |
|---|
| | 480 | } |
|---|
| | 481 | |
|---|
| | 482 | private function addEventHandler(dispatcher:IEventDispatcher, type:String, func:Function, useCapture:Boolean, priority:int, useWeakReference:Boolean):void |
|---|
| | 483 | { |
|---|
| | 484 | // イベントハンドラを作成してリストに追加 |
|---|
| | 485 | getEventHandlers().push(new EventHandler(dispatcher, type, eventHandler, func, useCapture, priority, useWeakReference)); |
|---|
| | 486 | } |
|---|
| | 487 | |
|---|
| | 488 | private function resetEventHandlers():void |
|---|
| | 489 | { |
|---|
| | 490 | // イベントハンドラリストがなければ何もしない |
|---|
| | 491 | if (_eventHandlers == null) { |
|---|
| | 492 | return; |
|---|
| | 493 | } |
|---|
| | 494 | |
|---|
| | 495 | // 全てのイベントハンドラの登録を解除 |
|---|
| | 496 | for each (var handler:EventHandler in _eventHandlers) { |
|---|
| | 497 | handler.unregister(); |
|---|
| | 498 | } |
|---|
| | 499 | |
|---|
| | 500 | // 配列を初期化 |
|---|
| | 501 | _eventHandlers.length = 0; |
|---|
| | 502 | } |
|---|
| | 503 | |
|---|
| | 504 | private function eventHandler(e:Event, handler:EventHandler):void |
|---|
| | 505 | { |
|---|
| | 506 | // 既にイベントが起こっていれば何もしない |
|---|
| | 507 | if (_event != null) { |
|---|
| | 508 | return; |
|---|
| | 509 | } |
|---|
| | 510 | |
|---|
| | 511 | // イベントを保存 |
|---|
| | 512 | _event = e.clone(); |
|---|
| | 513 | |
|---|
| | 514 | // 該当するイベントハンドラを次の実行関数に設定 |
|---|
| | 515 | _runHandler = handler.func; |
|---|
| | 516 | |
|---|
| | 517 | // イベントハンドラをリセット |
|---|
| | 518 | resetEventHandlers(); |
|---|
| | 519 | |
|---|
| | 520 | // スレッドを起こす |
|---|
| | 521 | _eventMonitor.notifyAll(); |
|---|
| 584 | | // エラーハンドラである場合は例外と例外の発生元のスレッドを引数として渡す |
|---|
| 585 | | runHandler.apply(this, errorHandler != null ? [error, errorThread] : null); |
|---|
| | 645 | if (errorHandler != null) { |
|---|
| | 646 | // エラーハンドラである場合は例外と例外の発生元のスレッドを引数として渡す |
|---|
| | 647 | runHandler.apply(this, [error, errorThread]); |
|---|
| | 648 | } |
|---|
| | 649 | else if (_event != null) { |
|---|
| | 650 | var ev:Event = _event; |
|---|
| | 651 | _event = null; |
|---|
| | 652 | // イベントハンドラである場合はイベントを渡す |
|---|
| | 653 | runHandler.apply(this, [ev]); |
|---|
| | 654 | } |
|---|
| | 655 | else { |
|---|
| | 656 | // それ以外の場合は引数なしで呼び出す |
|---|
| | 657 | runHandler.apply(this); |
|---|
| | 658 | } |
|---|
| | 1155 | |
|---|
| | 1156 | class EventHandler |
|---|
| | 1157 | { |
|---|
| | 1158 | public function EventHandler(dispatcher:IEventDispatcher, type:String, listener:Function, func:Function, useCapture:Boolean, priority:int, useWeakReference:Boolean) |
|---|
| | 1159 | { |
|---|
| | 1160 | this.dispatcher = dispatcher; |
|---|
| | 1161 | this.type = type; |
|---|
| | 1162 | this.listener = listener; |
|---|
| | 1163 | this.func = func; |
|---|
| | 1164 | this.useCapture = useCapture; |
|---|
| | 1165 | this.priority = priority; |
|---|
| | 1166 | this.useWeakReference = useWeakReference; |
|---|
| | 1167 | } |
|---|
| | 1168 | |
|---|
| | 1169 | public var dispatcher:IEventDispatcher; |
|---|
| | 1170 | public var type:String; |
|---|
| | 1171 | public var listener:Function; |
|---|
| | 1172 | public var func:Function; |
|---|
| | 1173 | public var useCapture:Boolean; |
|---|
| | 1174 | public var priority:int; |
|---|
| | 1175 | public var useWeakReference:Boolean; |
|---|
| | 1176 | |
|---|
| | 1177 | public function register():void |
|---|
| | 1178 | { |
|---|
| | 1179 | dispatcher.addEventListener(type, handler, useCapture, priority, useWeakReference); |
|---|
| | 1180 | } |
|---|
| | 1181 | |
|---|
| | 1182 | public function unregister():void |
|---|
| | 1183 | { |
|---|
| | 1184 | dispatcher.removeEventListener(type, handler, useCapture); |
|---|
| | 1185 | } |
|---|
| | 1186 | |
|---|
| | 1187 | private function handler(e:Event):void |
|---|
| | 1188 | { |
|---|
| | 1189 | listener(e, this); |
|---|
| | 1190 | } |
|---|
| | 1191 | } |
|---|