チェンジセット 548
- コミット日時:
- 2008/05/31 11:56:21 (6 ヶ月前)
- ファイル:
-
- as3/Thread/branches/soumen/Thread.as3proj (更新) (2 diffs)
- as3/Thread/branches/soumen/samples/progress (追加)
- as3/Thread/branches/soumen/samples/progress/MainThread.as (追加)
- as3/Thread/branches/soumen/samples/progress/ProgressBarThread.as (追加)
- as3/Thread/branches/soumen/samples/progress/Sample.as (追加)
- as3/Thread/branches/soumen/samples/progress/WorkerThread.as (追加)
- as3/Thread/branches/soumen/samples/urlloader/MainThreadWithProgress.as (追加)
- as3/Thread/branches/soumen/samples/urlloader/ProgressTraceThread.as (追加)
- as3/Thread/branches/soumen/samples/urlloader/SampleWithProgress.as (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/threads/display/LoaderThread.as (更新) (8 diffs)
- as3/Thread/branches/soumen/src/org/libspark/thread/threads/net/URLLoaderThread.as (更新) (7 diffs)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/IProgress.as (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/IProgressNotifier.as (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/MultiProgress.as (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/Progress.as (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/events (追加)
- as3/Thread/branches/soumen/src/org/libspark/thread/utils/events/ProgressEvent.as (追加)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/Thread/branches/soumen/Thread.as3proj
r543 r548 19 19 <class path="samples\urlloader" /> 20 20 <class path="samples\tweener" /> 21 <class path="samples\progress" /> 21 22 </classpaths> 22 23 <!-- Build options --> … … 66 67 <!-- Class files to compile (other referenced classes will automatically be included) --> 67 68 <compileTargets> 68 <compile path="samples\ tweener\Sample2.as" />69 <compile path="samples\progress\Sample.as" /> 69 70 </compileTargets> 70 71 <!-- Paths to exclude from the Project Explorer tree --> as3/Thread/branches/soumen/src/org/libspark/thread/threads/display/LoaderThread.as
r537 r548 31 31 import flash.events.Event; 32 32 import flash.events.IOErrorEvent; 33 import flash.events.ProgressEvent; 33 34 import flash.net.URLRequest; 34 35 import flash.system.LoaderContext; 35 36 import flash.errors.IOError; 37 import org.libspark.thread.utils.IProgress; 38 import org.libspark.thread.utils.IProgressNotifier; 39 import org.libspark.thread.utils.Progress; 36 40 37 41 import org.libspark.thread.Thread; … … 52 56 * @author yossy:beinteractive 53 57 */ 54 public class LoaderThread extends Thread 58 public class LoaderThread extends Thread implements IProgressNotifier 55 59 { 56 60 /** … … 66 70 _context = context; 67 71 _loader = loader != null ? loader : new Loader(); 72 _progress = new Progress(); 68 73 } 69 74 … … 71 76 private var _context:LoaderContext; 72 77 private var _loader:Loader; 78 private var _progress:Progress; 73 79 74 80 /** … … 106 112 107 113 /** 114 * @inheritDoc 115 */ 116 public function get progress():IProgress 117 { 118 return _progress; 119 } 120 121 /** 108 122 * 実行 109 123 * … … 114 128 // イベントハンドラを設定 115 129 // Note: イベントハンドラを設定した場合、自動的に wait がかかる 116 event(_loader.contentLoaderInfo, Event.COMPLETE, completeHandler); 117 event(_loader.contentLoaderInfo, IOErrorEvent.IO_ERROR, ioErrorHandler); 130 events(); 118 131 119 132 // 割り込みハンドラを設定 … … 125 138 126 139 /** 127 * Event.COMPLETEハンドラ 140 * イベントハンドラの登録 141 * 142 * @private 143 */ 144 private function events():void 145 { 146 event(_loader.contentLoaderInfo, Event.COMPLETE, completeHandler); 147 event(_loader.contentLoaderInfo, ProgressEvent.PROGRESS, progressHandler); 148 event(_loader.contentLoaderInfo, IOErrorEvent.IO_ERROR, ioErrorHandler); 149 } 150 151 /** 152 * まだ開始を通知していなければ通知する 153 * 154 * @private 155 */ 156 private function notifyStartIfNeeded(total:Number):void 157 { 158 if (!_progress.isStarted) { 159 _progress.start(total); 160 } 161 } 162 163 /** 164 * ProgressEvent.PROGRESS ハンドラ 165 */ 166 private function progressHandler(e:ProgressEvent):void 167 { 168 // 必要であれば開始を通知 169 notifyStartIfNeeded(e.bytesTotal); 170 171 // 進捗を通知 172 _progress.progress(e.bytesLoaded); 173 174 // 割り込みハンドラを設定 175 interrupted(interruptedHandler); 176 177 // 再びイベント待ち 178 events(); 179 } 180 181 /** 182 * Event.COMPLETE ハンドラ 128 183 */ 129 184 private function completeHandler(e:Event):void 130 185 { 131 // 何もしない → スレッドが終了する 132 } 133 134 /** 135 * IOErrorEvent.IO_ERRORハンドラ 186 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 187 notifyStartIfNeeded(0); 188 189 // 完了を通知 190 _progress.complete(); 191 192 // ここでスレッド終了 193 } 194 195 /** 196 * IOErrorEvent.IO_ERROR ハンドラ 136 197 */ 137 198 private function ioErrorHandler(e:IOErrorEvent):void 138 199 { 200 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 201 notifyStartIfNeeded(0); 202 203 // 失敗を通知 204 _progress.fail(); 205 139 206 // IOError をスロー 140 207 throw new IOError(e.text); … … 146 213 private function interruptedHandler():void 147 214 { 215 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 216 notifyStartIfNeeded(0); 217 148 218 // ロードをキャンセル 149 219 _loader.close(); 220 221 // キャンセルを通知 222 _progress.cancel(); 150 223 } 151 224 } as3/Thread/branches/soumen/src/org/libspark/thread/threads/net/URLLoaderThread.as
r535 r548 28 28 package org.libspark.thread.threads.net 29 29 { 30 import flash.events.ProgressEvent; 30 31 import org.libspark.thread.Thread; 32 import org.libspark.thread.utils.IProgress; 33 import org.libspark.thread.utils.IProgressNotifier; 34 import org.libspark.thread.utils.Progress; 31 35 32 36 import flash.net.URLLoader; … … 55 59 * @author yossy:beinteractive 56 60 */ 57 public class URLLoaderThread extends Thread 61 public class URLLoaderThread extends Thread implements IProgressNotifier 58 62 { 59 63 /** … … 67 71 _request = request; 68 72 _loader = loader != null ? loader : new URLLoader(); 73 _progress = new Progress(); 69 74 } 70 75 71 76 private var _request:URLRequest; 72 77 private var _loader:URLLoader; 73 private var _ error:Error;78 private var _progress:Progress; 74 79 75 80 /** … … 97 102 98 103 /** 104 * @inheritDoc 105 */ 106 public function get progress():IProgress 107 { 108 return _progress; 109 } 110 111 /** 99 112 * ロード処理をキャンセルします 100 113 */ … … 112 125 // イベントハンドラを設定 113 126 // Note: イベントハンドラを設定した場合、自動的に wait がかかる 127 events(); 128 129 // 割り込みハンドラを設定 130 interrupted(interruptedHandler); 131 132 // ロード開始 133 _loader.load(_request); 134 } 135 136 /** 137 * イベントハンドラの登録 138 * 139 * @private 140 */ 141 private function events():void 142 { 114 143 event(_loader, Event.COMPLETE, completeHandler); 144 event(_loader, ProgressEvent.PROGRESS, progressHandler); 115 145 event(_loader, IOErrorEvent.IO_ERROR, ioErrorHandler); 116 146 event(_loader, SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 147 } 148 149 /** 150 * まだ開始を通知していなければ通知する 151 * 152 * @private 153 */ 154 private function notifyStartIfNeeded(total:Number):void 155 { 156 if (!_progress.isStarted) { 157 _progress.start(total); 158 } 159 } 160 161 /** 162 * ProgressEvent.PROGRESS ハンドラ 163 */ 164 private function progressHandler(e:ProgressEvent):void 165 { 166 // 必要であれば開始を通知 167 notifyStartIfNeeded(e.bytesTotal); 168 169 // 進捗を通知 170 _progress.progress(e.bytesLoaded); 117 171 118 172 // 割り込みハンドラを設定 119 173 interrupted(interruptedHandler); 120 174 121 // ロード開始122 _loader.load(_request);123 } 124 125 /** 126 * Event.COMPLETE ハンドラ175 // 再びイベント待ち 176 events(); 177 } 178 179 /** 180 * Event.COMPLETE ハンドラ 127 181 */ 128 182 private function completeHandler(e:Event):void 129 183 { 130 // 何もしない → スレッドが終了する 131 } 132 133 /** 134 * IOErrorEvent.IO_ERRORハンドラ 184 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 185 notifyStartIfNeeded(0); 186 187 // 完了を通知 188 _progress.complete(); 189 190 // ここでスレッド終了 191 } 192 193 /** 194 * IOErrorEvent.IO_ERROR ハンドラ 135 195 */ 136 196 private function ioErrorHandler(e:IOErrorEvent):void 137 197 { 198 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 199 notifyStartIfNeeded(0); 200 201 // 失敗を通知 202 _progress.fail(); 203 138 204 // IOError をスロー 139 205 throw new IOError(e.text); … … 141 207 142 208 /** 143 * SecurityErrorEvent.SECURITY_ERROR ハンドラ209 * SecurityErrorEvent.SECURITY_ERROR ハンドラ 144 210 */ 145 211 private function securityErrorHandler(e:SecurityErrorEvent):void 146 212 { 213 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 214 notifyStartIfNeeded(0); 215 216 // 失敗を通知 217 _progress.fail(); 218 147 219 // SecurityError をスロー 148 220 throw new SecurityError(e.text); … … 154 226 private function interruptedHandler():void 155 227 { 228 // 必要であれば開始を通知 (問題が発生しなければ通常 progressHandler で通知される) 229 notifyStartIfNeeded(0); 230 156 231 // ロードをキャンセル 157 232 _loader.close(); 233 234 // キャンセルを通知 235 _progress.cancel(); 158 236 } 159 237 }
