2011年9月7日水曜日

FLASHでGUIの3

FLASHのGUIといっても、当然、サーバとのやりとりが必要なわけで。
そうすると、マルチタスクのイベントドリブンのような顔をした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 件のコメント:

コメントを投稿