2011年9月7日水曜日

FLASHでGUIの3

FLASHのGUIといっても、当然、サーバとのやりとりが必要なわけで。
そうすると、マルチタスクのイベントドリブンのような顔をしたActionScriptではあるけど、
正しくタイムシェアリングしてるわけでもなんでもないし、
サーバとの転送量が大きい場合(データが大きい画像とか)を考えると、
1つづつ実行できるようなシステムにしたいわけですね。
といったところで、画像一覧をゲットするようなことを考えて見る。

●httpのためのクラスを作る
【仕様】
→url、データのタイプ、パラメータ、callBack関数を複数指定して、
ひとつづつhttpリクエストをかける。
100コの画像を取ってくる場合でも、必ず、ひとつずつリクエストするものとする。

いろいろやって結果、スマートかどうかは別にして、、、
タイマを使うことになってしまった。
要するに、
実行中かどうかをフラグで判定して、判定中だったら、タイマをまた設定みたいなことを繰り返す。
ActionScriptにはSleepも無いことだし。
ちょっといい加減に書きなぐったSRCがこんな感じ。

なんとなくそれらしく動く。パラメータとかTEXT系じゃないときは、次に考えます。

  1. function spHttp(){  
  2.   own = this;  
  3.   init();  
  4. }  
  5. // ------------------------------------------------------------------------------  
  6. public function init():void{  
  7.   datAr  = new Array;  
  8. }  
  9. // ------------------------------------------------------------------------------  
  10. public function setData(url:String,  comtype:uint,  okRes:Function,  ngRes:Function,  method:String="POST",useProxy:Boolean=false):void{  
  11.   datAr.unshift(  
  12.           {  
  13.             "url":    url,  
  14.             "comtype":  comtype,  
  15.             "okFunc":  okRes,  
  16.             "ngFunc":  ngRes,  
  17.             "method":  method,  
  18.             "useProxy":  useProxy  
  19.           }  
  20.         );  
  21. }  
  22. // ------------------------------------------------------------------------------  
  23. public function execute(){  
  24.   setTimeout(executeSub, tInterval);  
  25. }  
  26. // ------------------------------------------------------------------------------  
  27. public function executeSub(){  
  28.   if(datAr.length < 1){  
  29.     //  END  
  30.   }else{  
  31.     if(bRun){  
  32.       setTimeout(executeSub, tInterval);  
  33.     }else{  
  34.       bRun = true;  
  35.       var o:Object  = datAr.pop();  
  36.       httpSV  = new HTTPService();  
  37.       httpSV.addEventListener(ResultEvent.RESULT,  okResult);  
  38.       httpSV.addEventListener(FaultEvent.FAULT,  ngResult);  
  39.       httpSV.resultFormat = "text";  //    
  40.       httpSV.url    = o.url;    //    
  41.       httpSV.method  = o.method;    //  httpSV.method = "POST";  
  42.       httpSV.useProxy  = o.useProxy;  //  httpSV.useProxy =false;  
  43.       uVar  = new URLVariables;  
  44.       uVar.decode("Giant=Baba");  
  45.       var at:AsyncToken = httpSV.send(uVar);  
  46.       at.id    = o.comtype;  
  47.       okFunction  = o.okFunc;  
  48.       ngFunction  = o.ngFunc;  
  49.     }  
  50.   }  
  51. }  
  52. // ------------------------------------------------------------------------------  
  53. public function okResult(event:ResultEvent):void{  
  54.   httpSV.removeEventListener(ResultEvent.RESULT,okResult);  
  55.   httpSV.removeEventListener(FaultEvent.FAULT,ngResult);  
  56.   okFunction(event);      //  本当の処理はこっちだよ  
  57.   bRun = false;  
  58.   execute();  
  59. }  
  60. // ------------------------------------------------------------------------------  
  61. public function ngResult(event:FaultEvent):void  
  62. {  
  63.   httpSV.removeEventListener(ResultEvent.RESULT,okResult);  
  64.   httpSV.removeEventListener(FaultEvent.FAULT,ngResult);  
  65.   ngFunction(event);      //  本当の処理はこっちだよ  
  66.   bRun = false;  
  67.   execute();  
  68. }  
  69. // ------------------------------------------------------------------------------  

0 件のコメント:

コメントを投稿