收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1833|回复: 0

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

[复制链接]
发表于 2010-6-13 09:40:44 | 显示全部楼层 |阅读模式
[AS3]AMF3Connection类-使用AMF3数据格式来请求服务端数据
原文地址:http://www.klstudio.com/post/210.html
在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.          * amf3连接类
  16.          * @author Kinglong
  17.          * @mail:kinglong@gmail.com
  18.          * @since:2010-5-21
  19.          */
  20.         [Event(name="success", type="com.klstudio.events.AMF3ConnectionEvent")]
  21.         [Event(name="failed", type="com.klstudio.events.AMF3ConnectionEvent")]
  22.         public class AMF3Connection extends EventDispatcher{
  23.                 private var _url:String;
  24.                 private var _requestMethod:String;
  25.                 private var _loaders:Dictionary;
  26.                 private var _compressed:Boolean;
  27.                 public function AMF3Connection(url:String,compressed:Boolean=false){
  28.                         _url = url;
  29.                         _requestMethod = URLRequestMethod.POST;
  30.                         _loaders = new Dictionary(true);
  31.                         _compressed = compressed;
  32.                 }
  33.                
  34.                 public function isCompressed():Boolean{
  35.                         return _compressed;
  36.                 }

  37.                 public function get requestMethod():String{
  38.                         return _requestMethod;
  39.                 }
  40.                
  41.                 public function set requestMethod(value:String):void {
  42.                         _requestMethod = value;
  43.                 }

  44.                 public function get url():String{
  45.                         return _url;
  46.                 }
  47.                
  48.                 public function call(method:String,callback:Function=null,args:Array=null):void{
  49.                         var request:AMF3Request = new AMF3Request(method, callback, args);
  50.                         trace(this,"request>" + request.toString());                       
  51.                         var bytes:ByteArray = new ByteArray();
  52.                         bytes.writeObject(request.data);
  53.                         bytes.objectEncoding = ObjectEncoding.AMF3;
  54.                         if(_compressed) {
  55.                                 bytes.compress();
  56.                         }
  57.                         trace(this,"url>" + url);               
  58.                         var req:URLRequest = new URLRequest(url + "?r=" + Math.random());
  59.                         req.method = requestMethod;
  60.                         req.data = bytes;       
  61.                         var loader:URLLoader = new URLLoader();
  62.                         addLoaderHandler(loader);
  63.                         loader.load(req);       
  64.                         _loaders[loader] = request;
  65.                 }
  66.                
  67.                 private function loaderHandler(event:Event):void{
  68.                         var loader:URLLoader = event.target as URLLoader;
  69.                         removeLoaderHandler(loader);
  70.                         var request:AMF3Request = _loaders[loader];
  71.                         var response:AMF3Response = new AMF3Response(request,"没有响应请求",AMF3Response.STATE_ERROR);
  72.                         trace(this,event.type);
  73.                         switch(event.type){
  74.                                 case Event.COMPLETE:
  75.                                         try{
  76.                                                 var bytes:ByteArray = loader.data as ByteArray;
  77.                                                 if(_compressed) {
  78.                                                         bytes.uncompress();
  79.                                                 }
  80.                                                 response = AMF3Response.parse(request,bytes.readObject());                                               
  81.                                         }catch(error:Error){
  82.                                                 trace(this,error.message);
  83.                                                 response = new AMF3Response(request,"不能解析返回对象",AMF3Response.STATE_ERROR);
  84.                                         }
  85.                                         break;
  86.                                 case IOErrorEvent.IO_ERROR:
  87.                                         response = new AMF3Response(request,"访问地址["+url+"]出错",AMF3Response.STATE_ERROR);
  88.                                         break;
  89.                                 case SecurityErrorEvent.SECURITY_ERROR:
  90.                                         response = new AMF3Response(request,"Flash不能跨域访问",AMF3Response.STATE_ERROR);
  91.                                         break;
  92.                         }
  93.                         dispatchEvent(new AMF3ConnectionEvent(response.isSuccess()?AMF3ConnectionEvent.SUCCESS:AMF3ConnectionEvent.FAILED, response));
  94.                         if(request.callback != null) {
  95.                                 request.callback.call(null, response);                       
  96.                         }
  97.                         delete _loaders[loader];
  98.                         loader.close();
  99.                         loader = null;
  100.                 }
  101.                
  102.                 private function addLoaderHandler(loader:URLLoader):void{
  103.                         loader.dataFormat = URLLoaderDataFormat.BINARY;                       
  104.                         loader.addEventListener(Event.COMPLETE, loaderHandler);
  105.                         loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
  106.                         loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);                                       
  107.                 }

  108.                 private function removeLoaderHandler(loader:URLLoader):void{
  109.                         loader.removeEventListener(Event.COMPLETE, loaderHandler);
  110.                         loader.removeEventListener(IOErrorEvent.IO_ERROR, loaderHandler);
  111.                         loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);                       
  112.                 }
  113.         }
  114. }

复制代码


AMF3ConnectionEvent类
  1. package com.klstudio.events {
  2.         import com.klstudio.net.AMF3Response;
  3.         import flash.events.Event;

  4.         /**
  5.          * amf3连接事件
  6.          * @author Kinglong
  7.          * @mail:kinglong@gmail.com
  8.          * @web:http://www.klstudio.com
  9.          * @since:2010-5-22
  10.          */       

  11.         public class AMF3ConnectionEvent extends Event {
  12.                 public static const SUCCESS:String = "success";
  13.                 public static const FAILED:String = "failed";
  14.                
  15.                 private var _response:AMF3Response;
  16.                 public function AMF3ConnectionEvent(type : String, response:AMF3Response,bubbles:Boolean=false,cancelable:Boolean=false) {
  17.                         super(type, bubbles, cancelable);
  18.                         _response = response;
  19.                 }
  20.                
  21.                 public function get response():AMF3Response{
  22.                         return _response;
  23.                 }

  24.                
  25.                 override public function clone() : Event {
  26.                         return new AMF3ConnectionEvent(type,response,bubbles,cancelable);
  27.                 }
  28.         }
  29. }
复制代码

AMF3Request类
  1. package com.klstudio.net {

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


AMF3Response类
  1. package com.klstudio.net {

  2.         /**
  3.          * amf3响应类
  4.          * @author Kinglong
  5.          * @mail:kinglong@gmail.com
  6.          * @web:http://www.klstudio.com
  7.          * @since:2010-5-22
  8.          */       

  9.         public class AMF3Response {
  10.                
  11.                 public static const STATE_SUCCESS:String = "00";
  12.                 public static const STATE_ERROR:String = "99";
  13.                
  14.                 private var _message:String;
  15.                 private var _result:Object;
  16.                 private var _state:String;
  17.                 private var _request:AMF3Request;
  18.                
  19.                 public static function parse(request:AMF3Request,obj:Object):AMF3Response{
  20.                         if(obj == null) return null;
  21.                         if(!obj.hasOwnProperty("state")) return null;
  22.                         if(!obj.hasOwnProperty("message") && !obj.hasOwnProperty("result")) return null;
  23.                         var response:AMF3Response;                                               
  24.                         if(obj["state"] == AMF3Response.STATE_SUCCESS){
  25.                                 response = new AMF3Response(request,obj["result"]);
  26.                         }else{
  27.                                 response = new AMF3Response(request,obj["message"],obj["state"]);
  28.                         }
  29.                         return response;
  30.                 }
  31.                
  32.                 public function AMF3Response(request:AMF3Request,context:*,state:String="00") {
  33.                         _request = request;
  34.                         _state = state;
  35.                         if(isSuccess()) {
  36.                                 _result = context;
  37.                         } else {
  38.                                 _message = context;
  39.                         }
  40.                 }
  41.                
  42.                 public function get request():AMF3Request{
  43.                         return _request;
  44.                 }

  45.                 public function get message():String{
  46.                         return _message;
  47.                 }
  48.                
  49.                 public function get result():Object{
  50.                         return _result;
  51.                 }
  52.                
  53.                 public function get state():String{
  54.                         return _state;
  55.                 }

  56.                 public function isSuccess():Boolean{
  57.                         return _state == AMF3Response.STATE_SUCCESS;
  58.                 }
  59.                
  60.                 public function toString() : String {
  61.                         return "AMF3Response[request="+request+",state="+state+",message="+message+",result="+result+"]";
  62.                 }
  63.         }
  64. }
复制代码

调用实例
  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);
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-7-24 13:19 , Processed in 0.073057 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表