2011年9月8日木曜日

FLASHでGUIの4

HttpServer関連と、Loader関連をひとつのクラスにしようと思ったけど、
まぁ使い方を考えると、それぞれ別でもイイ気がしてきたので、別で。
基本はHttpServerと同じ。内部でLoaderクラスを呼ぶだけ。
Httpのときと同じように、ひとつずつ動作させる。
こんな感じで。
// ------------------------------------------------------------------------------
function spLoadImage(){
  own = this;
  init();
}
// ------------------------------------------------------------------------------
public function ldInit(e:Event):void{
  trace(e);
}
// ------------------------------------------------------------------------------
public static function getEnum(n:int):String{
  switch(n){
    case eNotBitmap:    return  "Not Bitmap Resource";
    case eIOError:      return  "IO Error";
    case eSecurityError:  return  "Securit Error";
    default:        return  "Undifiend Error";
  }
}
// ------------------------------------------------------------------------------
private function ldComplete(e:Event):void{
  trace(e);
  if(loader.content is Bitmap){
    var lp:Object = loader.content;  //  var lp:Bitmapだとエラー
    var bit:Bitmap = new Bitmap(lp.bitmapData.clone());
    lp.bitmapData.dispose();
    okFunction(localVal,bit);
  }else{
    ngFunction(eNotBitmap,  getEnum(eNotBitmap));
  }
  nextGo();
}
// ------------------------------------------------------------------------------
private function ldIOError(e:IOErrorEvent):void{
  ngFunction(eIOError,e.text);
  nextGo();
}
// ------------------------------------------------------------------------------
private function nextGo():void{
  trace("--nextGo--");
  loader.contentLoaderInfo.removeEventListener(Event.INIT,        ldInit);
  loader.contentLoaderInfo.removeEventListener(Event.COMPLETE,      ldComplete);
  loader.contentLoaderInfo.removeEventListener(IOErrorEvent.IO_ERROR,    ldIOError);
  bRun = false;
  execute();
}
// ------------------------------------------------------------------------------
private function init():void{
  uVar  = new URLVariables;
  datAr  = new Array;
}
// ------------------------------------------------------------------------------
public function setData(url:String,  comtype:uint,  okRes:Function,  ngRes:Function,  args:String,method:String="POST"):void{
  datAr.unshift(
    {
      "url":    url,
      "comtype":  comtype,
      "okFunc":  okRes,
      "ngFunc":  ngRes,
      "args":    args,
      "method":  method
    }
  );
  //  Array  //  pop()  最後を取り出して削除  //  unshift(... args):uint 最初に追加
}
// ------------------------------------------------------------------------------
public function execute():void{
  setTimeout(executeSub, tInterval);
}
// ------------------------------------------------------------------------------
private function executeSub():void{
  if(datAr.length < 1){
    //  END
  }else{
    if(bRun){
      setTimeout(executeSub, tInterval);
    }else{
      trace("☆executeSub "+datAr.length);
      bRun = true;
      var o:Object  = datAr.pop();
      loader = new Loader;
      loader.contentLoaderInfo.addEventListener(Event.INIT,        ldInit);
      loader.contentLoaderInfo.addEventListener(Event.COMPLETE,      ldComplete);
      loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,  ldIOError);
      var UR:URLRequest    = new URLRequest(o.url);
      if(o.method == "GET")  UR.method = URLRequestMethod.GET;
      else          UR.method = URLRequestMethod.POST;
      uVar = new URLVariables;  //  何か設定することになるだろう。
      uVar.args = o.args;
      UR.data=uVar;        //  
      okFunction  = o.okFunc;
      ngFunction  = o.ngFunc;
      localVal  = o.comtype;
      try{
        loader.load(UR);
      }
      catch (error:SecurityError){  //  err:Error
        ngFunction(eSecurityError,getEnum(eSecurityError));
      }
    }
  }
}
// ------------------------------------------------------------------------------

0 件のコメント:

コメントを投稿