[转] Amf通信类


package applications.amfExample
{
import flash.events.NetStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.net.NetConnection;
import flash.net.ObjectEncoding;
import flash.net.Responder;

public class Amf
{
private static var conn:NetConnection = new NetConnection();
private static var requests:Array = new Array();
private static var netStatusError:Boolean = false;
private static var netStatusErrorMessage:String = "";
private static var netStatusErrorFunction:Function = null;
private static var resultFunction:Function = null;
private static var retry:int = 0;
private static var retried:int = 0;

/*
* Initialize AMF connection
* @conString:Server IP Address
* @retryNumber:Connection retried number on connect error
*/
public static function ini(conString:String, retryNumber:Number = 0, onErrorFunction:Function = null, onResultFunction:Function = null):void
{
conn.objectEncoding = ObjectEncoding.AMF3;
conn.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
conn.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
// Debug.info('[AMF] Connected to server : ' + conString);
conn.connect(conString);
retry = retryNumber;
resultFunction = onResultFunction;
netStatusErrorFunction = onErrorFunction;
}

public static function call(remoteFunction:String, localFunction:Function = null, object:Object = null):Number
{
if (null == object)object = new Object();
var request:Object = new Object();
request.remoteFunction = remoteFunction;
request.localFunction = localFunction != null ? localFunction : resultFunction;
request.object = object;
requests.push(request);
if (requests.length == 1)checkRequests();
return requests.length;
}

public static function checkRequests():void
{
if (requests.length > 0)
{
//Debug.info('[AMF] Amf call : ' + requests[0].remoteFunction);
conn.call(requests[0].remoteFunction, new Responder(onResult, onfault), requests[0].object);
}
}

private static function netStatusHandler(event:NetStatusEvent):void
{
if (retry > retried)
{
retried++;
checkRequests();
}
else
{
netStatusErrorMessage = event.info.code + ":" + requests[0].remoteFunction + "=>retried:" + retried;
onError();
}
}

private static function securityErrorHandler(event:SecurityErrorEvent):void
{
netStatusErrorMessage = "ERROR: SecurityErrorHandler: " + event;
onError();
}

private static function onResult(obj:Object):void
{
//Debug.info('[AMF] Amf callback : ' + requests[0].remoteFunction);
if(null == obj) obj = new Object();
try
{
if( undefined == obj.dataType) obj.dataType = requests[0].remoteFunction;
}
catch(e:Error)
{
netStatusErrorMessage = 'WARNING : There is no [dataType] after called on ' + requests[0].remoteFunction;
onError();
}
if (null != requests[0].localFunction)((requests[0].localFunction) as Function).call(requests[0].localFunction, obj);
netStatusError = false;
netStatusErrorMessage = "";
retried = 0;
requests.shift();
checkRequests();
}

private static function onfault(obj:Object):void
{
//netStatusErrorMessage = obj.toString();
netStatusErrorMessage = "ERROR: Server may not support *"+requests[0].remoteFunction + "*";
onError();
}

private static function onError():void
{
netStatusError = true;
if (null != netStatusErrorFunction)netStatusErrorFunction.call(netStatusErrorFunction, netStatusErrorMessage);
// Debug.info('[AMF] ' + netStatusErrorMessage);
}

public static function get con():NetConnection
{ //获取链接
return conn;
}

public static function close():void
{ //关闭链接
conn.close();
}

public static function getNetStatusErrorMessage():String
{ //获取错误信息
return netStatusErrorMessage;
}

public static function getNetStatusError():Boolean
{ //获取错误状态
return netStatusError;
}

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值