AMF3Connection类-使用AMF3数据格式来请求服务端数据

在Flash中使用AMF3数据格式有什么的好处我就不用重复说了,我主要把把代码贴出来,希望对相关人员有些帮助吧
AMF3Connection类

  1. package  com.klstudio.net {  
  2.     import  com.klstudio.events.AMF3ConnectionEvent;  
  3.     import  flash.events.EventDispatcher;  
  4.     import  flash.net.URLRequest;  
  5.     import  flash.net.ObjectEncoding;  
  6.     import  flash.utils.ByteArray;  
  7.     import  flash.net.URLLoaderDataFormat;  
  8.     import  flash.net.URLLoader;  
  9.     import  flash.events.SecurityErrorEvent;  
  10.     import  flash.events.IOErrorEvent;  
  11.     import  flash.events.Event;  
  12.     import  flash.net.URLRequestMethod;  
  13.     import  flash.utils.Dictionary;  
  14.   
  15.     /**  
  16.      * amf3连接类  
  17.      * @author Kinglong  
  18.      * @mail:kinglong@gmail.com  
  19.      * @since:2010-5-21  
  20.      */   
  21.     [Event(name="success" , type="com.klstudio.events.AMF3ConnectionEvent" )]  
  22.     [Event(name="failed" , type="com.klstudio.events.AMF3ConnectionEvent" )]  
  23.     public  class  AMF3Connection extends  EventDispatcher{  
  24.         private  var _url:String;  
  25.         private  var _requestMethod:String;  
  26.         private  var _loaders:Dictionary;  
  27.         private  var _compressed:Boolean;  
  28.         public  function AMF3Connection(url:String,compressed:Boolean=false ){  
  29.             _url = url;  
  30.             _requestMethod = URLRequestMethod.POST;  
  31.             _loaders = new  Dictionary(true );  
  32.             _compressed = compressed;  
  33.         }  
  34.           
  35.         public  function isCompressed():Boolean{  
  36.             return  _compressed;  
  37.         }  
  38.   
  39.         public  function get requestMethod():String{  
  40.             return  _requestMethod;  
  41.         }  
  42.           
  43.         public  function set requestMethod(value:String):void  {  
  44.             _requestMethod = value;  
  45.         }  
  46.   
  47.         public  function get url():String{  
  48.             return  _url;  
  49.         }  
  50.           
  51.         public  function call(method:String,callback:Function=null ,args:Array=null ):void {  
  52.             var request:AMF3Request = new  AMF3Request(method, callback, args);  
  53.             trace(this ,"request>"  + request.toString());           
  54.             var bytes:ByteArray = new  ByteArray();  
  55.             bytes.writeObject(request.data);  
  56.             bytes.objectEncoding = ObjectEncoding.AMF3;  
  57.             if (_compressed) {  
  58.                 bytes.compress();  
  59.             }  
  60.             trace(this ,"url>"  + url);          
  61.             var req:URLRequest = new  URLRequest(url + "?r="  + Math.random());  
  62.             req.method = requestMethod;  
  63.             req.data = bytes;     
  64.             var loader:URLLoader = new  URLLoader();  
  65.             addLoaderHandler(loader);  
  66.             loader.load(req);     
  67.             _loaders[loader] = request;  
  68.         }  
  69.           
  70.         private  function loaderHandler(event:Event):void {  
  71.             var loader:URLLoader = event.target as URLLoader;  
  72.             removeLoaderHandler(loader);  
  73.             var request:AMF3Request = _loaders[loader];  
  74.             var response:AMF3Response = new  AMF3Response(request,"没有响应请求" ,AMF3Response.STATE_ERROR);  
  75.             trace(this ,event.type);  
  76.             switch (event.type){  
  77.                 case  Event.COMPLETE:  
  78.                     try {  
  79.                         var bytes:ByteArray = loader.data as ByteArray;  
  80.                         if (_compressed) {  
  81.                             bytes.uncompress();  
  82.                         }  
  83.                         response = AMF3Response.parse(request,bytes.readObject());                        
  84.                     }catch (error:Error){  
  85.                         trace(this ,error.message);  
  86.                         response = new  AMF3Response(request,"不能解析返回对象" ,AMF3Response.STATE_ERROR);  
  87.                     }  
  88.                     break ;  
  89.                 case  IOErrorEvent.IO_ERROR:  
  90.                     response = new  AMF3Response(request,"访问地址[" +url+"]出错" ,AMF3Response.STATE_ERROR);  
  91.                     break ;  
  92.                 case  SecurityErrorEvent.SECURITY_ERROR:  
  93.                     response = new  AMF3Response(request,"Flash不能跨域访问" ,AMF3Response.STATE_ERROR);  
  94.                     break ;  
  95.             }  
  96.             dispatchEvent(new  AMF3ConnectionEvent(response.isSuccess()?AMF3ConnectionEvent.SUCCESS:AMF3ConnectionEvent.FAILED, response));  
  97.             if (request.callback != null ) {  
  98.                 request.callback.call(null , response);            
  99.             }  
  100.             delete _loaders[loader];  
  101.             loader.close();  
  102.             loader = null ;  
  103.         }  
  104.           
  105.         private  function addLoaderHandler(loader:URLLoader):void {  
  106.             loader.dataFormat = URLLoaderDataFormat.BINARY;           
  107.             loader.addEventListener(Event.COMPLETE, loaderHandler);  
  108.             loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);  
  109.             loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);                    
  110.         }  
  111.   
  112.         private  function removeLoaderHandler(loader:URLLoader):void {  
  113.             loader.removeEventListener(Event.COMPLETE, loaderHandler);  
  114.             loader.removeEventListener(IOErrorEvent.IO_ERROR, loaderHandler);  
  115.             loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);             
  116.         }  
  117.     }  
  118. }  



AMF3ConnectionEvent类

  1. package  com.klstudio.events {  
  2.     import  com.klstudio.net.AMF3Response;  
  3.     import  flash.events.Event;  
  4.   
  5.     /**  
  6.      * amf3连接事件  
  7.      * @author Kinglong  
  8.      * @mail:kinglong@gmail.com  
  9.      * @web:http://www.klstudio.com  
  10.      * @since:2010-5-22  
  11.      */    
  12.   
  13.     public  class  AMF3ConnectionEvent extends  Event {  
  14.         public  static  const  SUCCESS:String = "success" ;  
  15.         public  static  const  FAILED:String = "failed" ;  
  16.           
  17.         private  var _response:AMF3Response;  
  18.         public  function AMF3ConnectionEvent(type : String, response:AMF3Response,bubbles:Boolean=false ,cancelable:Boolean=false ) {  
  19.             super (type, bubbles, cancelable);  
  20.             _response = response;  
  21.         }  
  22.           
  23.         public  function get response():AMF3Response{  
  24.             return  _response;  
  25.         }  
  26.   
  27.           
  28.         override public  function clone() : Event {  
  29.             return  new  AMF3ConnectionEvent(type,response,bubbles,cancelable);  
  30.         }  
  31.     }  
  32. }  



AMF3Request类

  1. package  com.klstudio.net {  
  2.   
  3.     /**  
  4.      * amf3请求类  
  5.      * @author Kinglong  
  6.      * @mail:kinglong@gmail.com  
  7.      * @web:http://www.klstudio.com  
  8.      * @since:2010-5-21  
  9.      */    
  10.     public  class  AMF3Request {  
  11.         private  var _method:String;  
  12.         private  var _callback:Function;  
  13.         private  var _args:Array;  
  14.           
  15.         public  function AMF3Request(method:String,callback:Function=null ,args:Array=null ){  
  16.             _method = method;  
  17.             _callback = callback;  
  18.             _args = args;  
  19.         }  
  20.           
  21.         public  function get method():String{  
  22.             return  _method;  
  23.         }  
  24.           
  25.         public  function get callback():Function{  
  26.             return  _callback;  
  27.         }  
  28.           
  29.         public  function get args():Array{  
  30.             return  _args;  
  31.         }  
  32.           
  33.         public  function get data():Object{  
  34.             if (args == null  || args.length == 0 ){  
  35.                 return  {method:method};  
  36.             }else {  
  37.                 return  {method:method,args:args};                  
  38.             }  
  39.         }  
  40.           
  41.         public  function toString():String{  
  42.             return  "AMF3Request[method=" +method+",callback=" +((callback == null )?"null" :"Function" )+",args=[" +args+"]]" ;  
  43.         }  
  44.     }  
  45. }  



AMF3Response类

  1. package  com.klstudio.net {  
  2.   
  3.     /**  
  4.      * amf3响应类  
  5.      * @author Kinglong  
  6.      * @mail:kinglong@gmail.com  
  7.      * @web:http://www.klstudio.com  
  8.      * @since:2010-5-22  
  9.      */    
  10.   
  11.     public  class  AMF3Response {  
  12.           
  13.         public  static  const  STATE_SUCCESS:String = "00" ;  
  14.         public  static  const  STATE_ERROR:String = "99" ;  
  15.           
  16.         private  var _message:String;  
  17.         private  var _result:Object;  
  18.         private  var _state:String;  
  19.         private  var _request:AMF3Request;  
  20.           
  21.         public  static  function parse(request:AMF3Request,obj:Object):AMF3Response{  
  22.             if (obj == nullreturn  null ;  
  23.             if (!obj.hasOwnProperty("state" )) return  null ;  
  24.             if (!obj.hasOwnProperty("message" ) && !obj.hasOwnProperty("result" )) return  null ;  
  25.             var response:AMF3Response;                        
  26.             if (obj["state" ] == AMF3Response.STATE_SUCCESS){  
  27.                 response = new  AMF3Response(request,obj["result" ]);  
  28.             }else {  
  29.                 response = new  AMF3Response(request,obj["message" ],obj["state" ]);  
  30.             }  
  31.             return  response;  
  32.         }  
  33.           
  34.         public  function AMF3Response(request:AMF3Request,context:*,state:String="00" ) {  
  35.             _request = request;  
  36.             _state = state;  
  37.             if (isSuccess()) {  
  38.                 _result = context;  
  39.             } else  {  
  40.                 _message = context;  
  41.             }  
  42.         }  
  43.           
  44.         public  function get request():AMF3Request{  
  45.             return  _request;  
  46.         }  
  47.   
  48.         public  function get message():String{  
  49.             return  _message;  
  50.         }  
  51.           
  52.         public  function get result():Object{  
  53.             return  _result;  
  54.         }  
  55.           
  56.         public  function get state():String{  
  57.             return  _state;  
  58.         }  
  59.   
  60.         public  function isSuccess():Boolean{  
  61.             return  _state == AMF3Response.STATE_SUCCESS;  
  62.         }  
  63.           
  64.         public  function toString() : String {  
  65.             return  "AMF3Response[request=" +request+",state=" +state+",message=" +message+",result=" +result+"]" ;  
  66.         }  
  67.     }  
  68. }  


调用实例

  1. import  com.klstudio.net.AMF3Connection;  
  2. import  com.klstudio.net.AMF3Response;  
  3. AMF3Connection amf3conn = new  AMF3Connection(url,true );  
  4. function callback(response:AMF3Response){  
  5.    trace(response);  
  6. }  
  7. amf3conn.call("checkLogin" , callback); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值