そうすると、マルチタスクのイベントドリブンのような顔をしたActionScriptではあるけど、
正しくタイムシェアリングしてるわけでもなんでもないし、
サーバとの転送量が大きい場合(データが大きい画像とか)を考えると、
1つづつ実行できるようなシステムにしたいわけですね。
といったところで、画像一覧をゲットするようなことを考えて見る。
●httpのためのクラスを作る
【仕様】
→url、データのタイプ、パラメータ、callBack関数を複数指定して、
ひとつづつhttpリクエストをかける。
100コの画像を取ってくる場合でも、必ず、ひとつずつリクエストするものとする。
いろいろやって結果、スマートかどうかは別にして、、、
タイマを使うことになってしまった。
要するに、
実行中かどうかをフラグで判定して、判定中だったら、タイマをまた設定みたいなことを繰り返す。
ActionScriptにはSleepも無いことだし。
ちょっといい加減に書きなぐったSRCがこんな感じ。
なんとなくそれらしく動く。パラメータとかTEXT系じゃないときは、次に考えます。
function spHttp(){ own = this; init(); } // ------------------------------------------------------------------------------ public function init():void{ datAr = new Array; } // ------------------------------------------------------------------------------ public function setData(url:String, comtype:uint, okRes:Function, ngRes:Function, method:String="POST",useProxy:Boolean=false):void{ datAr.unshift( { "url": url, "comtype": comtype, "okFunc": okRes, "ngFunc": ngRes, "method": method, "useProxy": useProxy } ); } // ------------------------------------------------------------------------------ public function execute(){ setTimeout(executeSub, tInterval); } // ------------------------------------------------------------------------------ public function executeSub(){ if(datAr.length < 1){ // END }else{ if(bRun){ setTimeout(executeSub, tInterval); }else{ bRun = true; var o:Object = datAr.pop(); httpSV = new HTTPService(); httpSV.addEventListener(ResultEvent.RESULT, okResult); httpSV.addEventListener(FaultEvent.FAULT, ngResult); httpSV.resultFormat = "text"; // httpSV.url = o.url; // httpSV.method = o.method; // httpSV.method = "POST"; httpSV.useProxy = o.useProxy; // httpSV.useProxy =false; uVar = new URLVariables; uVar.decode("Giant=Baba"); var at:AsyncToken = httpSV.send(uVar); at.id = o.comtype; okFunction = o.okFunc; ngFunction = o.ngFunc; } } } // ------------------------------------------------------------------------------ public function okResult(event:ResultEvent):void{ httpSV.removeEventListener(ResultEvent.RESULT,okResult); httpSV.removeEventListener(FaultEvent.FAULT,ngResult); okFunction(event); // 本当の処理はこっちだよ bRun = false; execute(); } // ------------------------------------------------------------------------------ public function ngResult(event:FaultEvent):void { httpSV.removeEventListener(ResultEvent.RESULT,okResult); httpSV.removeEventListener(FaultEvent.FAULT,ngResult); ngFunction(event); // 本当の処理はこっちだよ bRun = false; execute(); } // ------------------------------------------------------------------------------
0 件のコメント:
コメントを投稿