您的位置:首页 > 其它

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

2010-10-11 09:57 405 查看
在Flash中使用AMF3数据格式有什么的好处我就不用重复说了,我主要把把代码贴出来,希望对相关人员有些帮助吧

AMF3Connection类

view plain
copy to clipboard
print
?

package
com.klstudio.net {

import
com.klstudio.events.AMF3ConnectionEvent;

import
flash.events.EventDispatcher;

import
flash.net.URLRequest;

import
flash.net.ObjectEncoding;

import
flash.utils.ByteArray;

import
flash.net.URLLoaderDataFormat;

import
flash.net.URLLoader;

import
flash.events.SecurityErrorEvent;

import
flash.events.IOErrorEvent;

import
flash.events.Event;

import
flash.net.URLRequestMethod;

import
flash.utils.Dictionary;

/**

* amf3连接类

* @author Kinglong

* @mail:kinglong@gmail.com

* @since:2010-5-21

*/

[Event(name="success"
, type="com.klstudio.events.AMF3ConnectionEvent"
)]

[Event(name="failed"
, type="com.klstudio.events.AMF3ConnectionEvent"
)]

public
class
AMF3Connection extends
EventDispatcher{

private
var _url:String;

private
var _requestMethod:String;

private
var _loaders:Dictionary;

private
var _compressed:Boolean;

public
function AMF3Connection(url:String,compressed:Boolean=false
){

_url = url;

_requestMethod = URLRequestMethod.POST;

_loaders = new
Dictionary(true
);

_compressed = compressed;

}

public
function isCompressed():Boolean{

return
_compressed;

}

public
function get requestMethod():String{

return
_requestMethod;

}

public
function set requestMethod(value:String):void
{

_requestMethod = value;

}

public
function get url():String{

return
_url;

}

public
function call(method:String,callback:Function=null
,args:Array=null
):void
{

var request:AMF3Request = new
AMF3Request(method, callback, args);

trace(this
,"request>"
+ request.toString());

var bytes:ByteArray = new
ByteArray();

bytes.writeObject(request.data);

bytes.objectEncoding = ObjectEncoding.AMF3;

if
(_compressed) {

bytes.compress();

}

trace(this
,"url>"
+ url);

var req:URLRequest = new
URLRequest(url + "?r="
+ Math.random());

req.method = requestMethod;

req.data = bytes;

var loader:URLLoader = new
URLLoader();

addLoaderHandler(loader);

loader.load(req);

_loaders[loader] = request;

}

private
function loaderHandler(event:Event):void
{

var loader:URLLoader = event.target as URLLoader;

removeLoaderHandler(loader);

var request:AMF3Request = _loaders[loader];

var response:AMF3Response = new
AMF3Response(request,"没有响应请求"
,AMF3Response.STATE_ERROR);

trace(this
,event.type);

switch
(event.type){

case
Event.COMPLETE:

try
{

var bytes:ByteArray = loader.data as ByteArray;

if
(_compressed) {

bytes.uncompress();

}

response = AMF3Response.parse(request,bytes.readObject());

}catch
(error:Error){

trace(this
,error.message);

response = new
AMF3Response(request,"不能解析返回对象"
,AMF3Response.STATE_ERROR);

}

break
;

case
IOErrorEvent.IO_ERROR:

response = new
AMF3Response(request,"访问地址["
+url+"]出错"
,AMF3Response.STATE_ERROR);

break
;

case
SecurityErrorEvent.SECURITY_ERROR:

response = new
AMF3Response(request,"Flash不能跨域访问"
,AMF3Response.STATE_ERROR);

break
;

}

dispatchEvent(new
AMF3ConnectionEvent(response.isSuccess()?AMF3ConnectionEvent.SUCCESS:AMF3ConnectionEvent.FAILED, response));

if
(request.callback != null
) {

request.callback.call(null
, response);

}

delete _loaders[loader];

loader.close();

loader = null
;

}

private
function addLoaderHandler(loader:URLLoader):void
{

loader.dataFormat = URLLoaderDataFormat.BINARY;

loader.addEventListener(Event.COMPLETE, loaderHandler);

loader.addEventListener(IOErrorEvent.IO_ERROR, loaderHandler);

loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);

}

private
function removeLoaderHandler(loader:URLLoader):void
{

loader.removeEventListener(Event.COMPLETE, loaderHandler);

loader.removeEventListener(IOErrorEvent.IO_ERROR, loaderHandler);

loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, loaderHandler);

}

}

}

package
com.klstudio.net {<br/>	import
com.klstudio.events.AMF3ConnectionEvent;<br/>	import
flash.events.EventDispatcher;<br/>	import
flash.net.URLRequest;<br/>	import
flash.net.ObjectEncoding;<br/>	import
flash.utils.ByteArray;<br/>	import
flash.net.URLLoaderDataFormat;<br/>	import
flash.net.URLLoader;<br/>	import
flash.events.SecurityErrorEvent;<br/>	import
flash.events.IOErrorEvent;<br/>	import
flash.events.Event;<br/>	import
flash.net.URLRequestMethod;<br/>	import
flash.utils.Dictionary;<br/><br/>	/**<br/>	 *
amf3连接类<br/>	 * @author Kinglong<br/>	 *
@mail:kinglong@gmail.com<br/>	 * @since:2010-5-21<br/>
*/<br/>	[Event(name="success",
type="com.klstudio.events.AMF3ConnectionEvent")]<br/>
[Event(name="failed",
type="com.klstudio.events.AMF3ConnectionEvent")]<br/>	public class
AMF3Connection extends EventDispatcher{<br/>		private var
_url:String;<br/>		private var _requestMethod:String;<br/>
private var _loaders:Dictionary;<br/>		private var
_compressed:Boolean;<br/>		public function
AMF3Connection(url:String,compressed:Boolean=false){<br/>			_url =
url;<br/>			_requestMethod = URLRequestMethod.POST;<br/>
_loaders = new Dictionary(true);<br/>			_compressed =
compressed;<br/>		}<br/>		<br/>		public function
isCompressed():Boolean{<br/>			return _compressed;<br/>
}<br/><br/>		public function get
requestMethod():String{<br/>			return _requestMethod;<br/>
}<br/>		<br/>		public function set
requestMethod(value:String):void {<br/>			_requestMethod =
value;<br/>		}<br/><br/>		public function get
url():String{<br/>			return _url;<br/>		}<br/>
<br/>		public function
call(method:String,callback:Function=null,args:Array=null):void{<br/>
var request:AMF3Request = new AMF3Request(method, callback,
args);<br/>			trace(this,"request>" + request.toString());
<br/>			var bytes:ByteArray = new ByteArray();<br/>
bytes.writeObject(request.data);<br/>			bytes.objectEncoding =
ObjectEncoding.AMF3;<br/>			if(_compressed) {<br/>
bytes.compress();<br/>			}<br/>			trace(this,"url>" +
url);		<br/>			var req:URLRequest = new URLRequest(url + "?r=" +
Math.random());<br/>			req.method = requestMethod;<br/>
req.data = bytes;	<br/>			var loader:URLLoader = new
URLLoader();<br/>			addLoaderHandler(loader);<br/>
loader.load(req);	<br/>			_loaders[loader] = request;<br/>
}<br/>		<br/>		private function
loaderHandler(event:Event):void{<br/>			var loader:URLLoader =
event.target as URLLoader;<br/>
removeLoaderHandler(loader);<br/>			var request:AMF3Request =
_loaders[loader];<br/>			var response:AMF3Response = new
AMF3Response(request,"没有响应请求",AMF3Response.STATE_ERROR);<br/>
trace(this,event.type);<br/>			switch(event.type){<br/>
case Event.COMPLETE:<br/>					try{<br/>						var
bytes:ByteArray = loader.data as ByteArray;<br/>
if(_compressed) {<br/>							bytes.uncompress();<br/>
}<br/>						response =
AMF3Response.parse(request,bytes.readObject());						<br/>
}catch(error:Error){<br/>
trace(this,error.message);<br/>						response = new
AMF3Response(request,"不能解析返回对象",AMF3Response.STATE_ERROR);<br/>
}<br/>					break;<br/>				case
IOErrorEvent.IO_ERROR:<br/>					response = new
AMF3Response(request,"访问地址["+url+"]出
错",AMF3Response.STATE_ERROR);<br/>					break;<br/>				case
SecurityErrorEvent.SECURITY_ERROR:<br/>					response = new
AMF3Response(request,"Flash不能跨域访问",AMF3Response.STATE_ERROR);<br/>
break;<br/>			}<br/>			dispatchEvent(new
AMF3ConnectionEvent(response.isSuccess()?AMF3ConnectionEvent.SUCCESS:AMF3ConnectionEvent.FAILED,
response));<br/>			if(request.callback != null) {<br/>
request.callback.call(null, response);			<br/>			}<br/>
delete _loaders[loader];<br/>			loader.close();<br/>
loader = null;<br/>		}<br/>		<br/>		private function
addLoaderHandler(loader:URLLoader):void{<br/>			loader.dataFormat =
URLLoaderDataFormat.BINARY;			<br/>
loader.addEventListener(Event.COMPLETE, loaderHandler);<br/>
loader.addEventListener(IOErrorEvent.IO_ERROR,
loaderHandler);<br/>
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
loaderHandler);					<br/>		}<br/><br/>		private
function removeLoaderHandler(loader:URLLoader):void{<br/>
loader.removeEventListener(Event.COMPLETE, loaderHandler);<br/>
loader.removeEventListener(IOErrorEvent.IO_ERROR,
loaderHandler);<br/>
loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,
loaderHandler);			<br/>		}<br/>
}<br/>}<br/><br/>


AMF3ConnectionEvent类

view plain
copy to clipboard
print
?

package
com.klstudio.events {

import
com.klstudio.net.AMF3Response;

import
flash.events.Event;

/**

* amf3连接事件

* @author Kinglong

* @mail:kinglong@gmail.com

* @web:http://www.klstudio.com

* @since:2010-5-22

*/

public
class
AMF3ConnectionEvent extends
Event {

public
static
const
SUCCESS:String = "success"
;

public
static
const
FAILED:String = "failed"
;

private
var _response:AMF3Response;

public
function AMF3ConnectionEvent(type : String, response:AMF3Response,bubbles:Boolean=false
,cancelable:Boolean=false
) {

super
(type, bubbles, cancelable);

_response = response;

}

public
function get response():AMF3Response{

return
_response;

}

override public
function clone() : Event {

return
new
AMF3ConnectionEvent(type,response,bubbles,cancelable);

}

}

}

package
com.klstudio.events {<br/>	import
com.klstudio.net.AMF3Response;<br/>	import
flash.events.Event;<br/><br/>	/**<br/>	 *
amf3连接事件<br/>	 * @author Kinglong<br/>	 *
@mail:kinglong@gmail.com<br/>	 *
@web:http://www.klstudio.com<br/>	 * @since:2010-5-22<br/>
*/	<br/><br/>	public class AMF3ConnectionEvent extends Event
{<br/>		public static const SUCCESS:String =
"success";<br/>		public static const FAILED:String =
"failed";<br/>		<br/>		private var
_response:AMF3Response;<br/>		public function
AMF3ConnectionEvent(type : String,
response:AMF3Response,bubbles:Boolean=false,cancelable:Boolean=false)
{<br/>			super(type, bubbles, cancelable);<br/>			_response =
response;<br/>		}<br/>		<br/>		public function get
response():AMF3Response{<br/>			return _response;<br/>
}<br/><br/>		<br/>		override public function clone() :
Event {<br/>			return new
AMF3ConnectionEvent(type,response,bubbles,cancelable);<br/>
}<br/>	}<br/>}<br/><br/>


AMF3Request类

view plain
copy to clipboard
print
?

package
com.klstudio.net {

/**

* amf3请求类

* @author Kinglong

* @mail:kinglong@gmail.com

* @web:http://www.klstudio.com

* @since:2010-5-21

*/

public
class
AMF3Request {

private
var _method:String;

private
var _callback:Function;

private
var _args:Array;

public
function AMF3Request(method:String,callback:Function=null
,args:Array=null
){

_method = method;

_callback = callback;

_args = args;

}

public
function get method():String{

return
_method;

}

public
function get callback():Function{

return
_callback;

}

public
function get args():Array{

return
_args;

}

public
function get data():Object{

if
(args == null
|| args.length == 0
){

return
{method:method};

}else
{

return
{method:method,args:args};

}

}

public
function toString():String{

return
"AMF3Request[method="
+method+",callback="
+((callback == null
)?"null"
:"Function"
)+",args=["
+args+"]]"
;

}

}

}

package
com.klstudio.net {<br/><br/>	/**<br/>	 *
amf3请求类<br/>	 * @author Kinglong<br/>	 *
@mail:kinglong@gmail.com<br/>	 *
@web:http://www.klstudio.com<br/>	 * @since:2010-5-21<br/>
*/	<br/>	public class AMF3Request {<br/>		private var
_method:String;<br/>		private var _callback:Function;<br/>
private var _args:Array;<br/>		<br/>		public function
AMF3Request(method:String,callback:Function=null,args:Array=null){<br/>
_method = method;<br/>			_callback = callback;<br/>
_args = args;<br/>		}<br/>		<br/>		public function get
method():String{<br/>			return _method;<br/>		}<br/>
<br/>		public function get callback():Function{<br/>
return _callback;<br/>		}<br/>		<br/>		public function
get args():Array{<br/>			return _args;<br/>		}<br/>
<br/>		public function get data():Object{<br/>			if(args ==
null || args.length == 0){<br/>				return
{method:method};<br/>			}else{<br/>				return
{method:method,args:args};				 <br/>			}<br/>		}<br/>
<br/>		public function toString():String{<br/>			return
"AMF3Request[method="+method+",callback="+((callback ==
null)?"null":"Function")+",args=["+args+"]]";<br/>		}<br/>
}<br/>}<br/>


AMF3Response类

view plain
copy to clipboard
print
?

package
com.klstudio.net {

/**

* amf3响应类

* @author Kinglong

* @mail:kinglong@gmail.com

* @web:http://www.klstudio.com

* @since:2010-5-22

*/

public
class
AMF3Response {

public
static
const
STATE_SUCCESS:String = "00"
;

public
static
const
STATE_ERROR:String = "99"
;

private
var _message:String;

private
var _result:Object;

private
var _state:String;

private
var _request:AMF3Request;

public
static
function parse(request:AMF3Request,obj:Object):AMF3Response{

if
(obj == null
) return
null
;

if
(!obj.hasOwnProperty("state"
)) return
null
;

if
(!obj.hasOwnProperty("message"
) && !obj.hasOwnProperty("result"
)) return
null
;

var response:AMF3Response;

if
(obj["state"
] == AMF3Response.STATE_SUCCESS){

response = new
AMF3Response(request,obj["result"
]);

}else
{

response = new
AMF3Response(request,obj["message"
],obj["state"
]);

}

return
response;

}

public
function AMF3Response(request:AMF3Request,context:*,state:String="00"
) {

_request = request;

_state = state;

if
(isSuccess()) {

_result = context;

} else
{

_message = context;

}

}

public
function get request():AMF3Request{

return
_request;

}

public
function get message():String{

return
_message;

}

public
function get result():Object{

return
_result;

}

public
function get state():String{

return
_state;

}

public
function isSuccess():Boolean{

return
_state == AMF3Response.STATE_SUCCESS;

}

public
function toString() : String {

return
"AMF3Response[request="
+request+",state="
+state+",message="
+message+",result="
+result+"]"
;

}

}

}

package
com.klstudio.net {<br/><br/>	/**<br/>	 *
amf3响应类<br/>	 * @author Kinglong<br/>	 *
@mail:kinglong@gmail.com<br/>	 *
@web:http://www.klstudio.com<br/>	 * @since:2010-5-22<br/>
*/	<br/><br/>	public class AMF3Response {<br/>
<br/>		public static const STATE_SUCCESS:String = "00";<br/>
public static const STATE_ERROR:String = "99";<br/>		<br/>
private var _message:String;<br/>		private var
_result:Object;<br/>		private var _state:String;<br/>
private var _request:AMF3Request;<br/>		<br/>		public static
function parse(request:AMF3Request,obj:Object):AMF3Response{<br/>
if(obj == null) return null;<br/>
if(!obj.hasOwnProperty("state")) return null;<br/>
if(!obj.hasOwnProperty("message") &&
!obj.hasOwnProperty("result")) return null;<br/>			var
response:AMF3Response;						<br/>			if(obj["state"] ==
AMF3Response.STATE_SUCCESS){<br/>				response = new
AMF3Response(request,obj["result"]);<br/>			}else{<br/>
response = new
AMF3Response(request,obj["message"],obj["state"]);<br/>
}<br/>			return response;<br/>		}<br/>		<br/>
public function
AMF3Response(request:AMF3Request,context:*,state:String="00")
{<br/>			_request = request;<br/>			_state =
state;<br/>			if(isSuccess()) {<br/>				_result =
context;<br/>			} else {<br/>				_message =
context;<br/>			}<br/>		}<br/>		<br/>		public
function get request():AMF3Request{<br/>			return
_request;<br/>		}<br/><br/>		public function get
message():String{<br/>			return _message;<br/>		}<br/>
<br/>		public function get result():Object{<br/>			return
_result;<br/>		}<br/>		<br/>		public function get
state():String{<br/>			return _state;<br/>
}<br/><br/>		public function isSuccess():Boolean{<br/>
return _state == AMF3Response.STATE_SUCCESS;<br/>		}<br/>
<br/>		public function toString() : String {<br/>			return

"AMF3Response[request="+request+",state="+state+",message="+message+",result="+result+"]";<br/>
}<br/>	}<br/>}<br/><br/>


调用实例

view plain
copy to clipboard
print
?

import
com.klstudio.net.AMF3Connection;

import
com.klstudio.net.AMF3Response;

AMF3Connection amf3conn = new
AMF3Connection(url,true
);

function callback(response:AMF3Response){

trace(response);

}

amf3conn.call("checkLogin"
, callback);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐