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;
}
}
}
分享到:
相关推荐
对于那些需要在旧系统上进行AMF通信的开发者来说,这是一个非常有价值的特性,因为许多较新的库可能只支持.NET Framework的更新版本。 AMF有多种版本,包括AMF0和AMF3,AMF.NET应该支持这两种格式,以适应不同场景...
基于AMF的Android数据通信 ...基于AMF通信 FLASH技术设计康复古籍检索平台[J]. 电脑开发与应用, 2012, 25(7). [4]吕海东.基于Flex和BlazeDS推技术实现WEB方式实时监控系统[J]. 计算机应用, 2010, 29(1).
在AMF3中,数据被编码为二进制流,支持多种数据类型,包括基本类型(如整型、浮点型、字符串、布尔值)、复杂类型(如对象、数组、日期、null、undefined)以及自定义类实例。这种二进制编码使得数据在网络上传输时...
描述中的“Flex AMF通讯,主要用于初学者配置FluorineFx.net服务端”说明了这个压缩包的主要用途,即帮助初学者了解如何在FluorineFx.NET环境中配置AMF通信。这通常涉及以下步骤: 1. **安装FluorineFx**: 下载并...
在Flex应用中,可以使用 BlazeDS 或 GraniteDS 这样的中间件来处理AMF通信。 总的来说,AMF1.0作为早期的AMF版本,为RIA开发提供了一种高效的数据交换方式,尽管现在已经被更先进的版本所替代,但在某些老项目或...
2. **Flex与AMF通信** - Flex应用通常通过HTTP/HTTPS与服务器通信,使用AMF协议封装数据,通过Flash Player发送到服务器。这些请求可能包括服务调用、事件处理等。 3. **抓取AMF数据** - 抓取AMF数据需要特殊工具...
AMF3(Action Message Format version 3)协议是Adobe公司为Flash Player和Flex应用程序之间通信设计的一种二进制数据交换格式。它旨在提高数据传输效率,同时保持足够的灵活性以适应不同类型的复杂数据结构。AMF3...
此实例完成了一个最简单的zend_amf与actionscript通信的流程。具体开发说明可参照此网址。http://blog.csdn.net/A82168506/archive/2011/04/27/6366667.aspx
2. **Client** - 这可能是Flex客户端项目的源代码目录,包含ActionScript类和界面组件,用于与服务器进行AMF通信。在Flex中,我们可以使用Flash Remoting来实现AMF,通过创建RemoteObject或 BlazeDS服务来调用服务器...
支持AMF格式的通信封包编码、解码、向AMF服务端发送请求、返回AMF数据解析。 支持RTMP封包编码、解码。 支持Flex外部化类的AMF编码、解码。 支持解压还原LZMA算法压缩过的SWF文件(文件头三字节为:ZWS的 *.SWF...
AMF(Action Message Format)是一种数据交换...这对于调试Flex应用或基于AMF通信的系统来说是极其重要的。通过这款工具,开发流程可以变得更加高效,节省了手动解析和验证AMF数据的时间,从而提升整体项目开发效率。
在C++编程环境中,AMF3库可以帮助开发者高效地处理这种数据格式,使得网络通信更加便捷。下面我们将详细探讨AMF3在C++中的实现以及源码库的相关知识点。 AMF3的核心功能在于能够将复杂的数据结构(如对象、数组、...
AMF,全称为Action Message Format,是一种二进制的数据交换格式,主要被Adobe Flex和Flash Player用于服务器与客户端之间的通信。在Python中,处理AMF数据通常需要借助特定的库,这里提到的"amf.zip_AMF_amf_python...
易语言AMF解析构造的源码,可以作为学习AMF通信和易语言编程的实战案例。通过阅读和理解代码,开发者可以掌握如何在易语言环境中进行二进制数据的读写,以及如何处理AMF数据的编码和解码流程。此外,这也为开发基于...
序列化后的 AMF 编码对象图可以用来持久化,并在不同的会话中获得应用的公共状态,或者允许在两个端点(如客户端和服务器端)通过强类型数据交换进行通信。 AMF 的历史可以追溯到 2001 年的 Flash Player 6,当时它...
2. **数据类型支持**:AMF3支持多种数据类型,包括整型、浮点型、字符串、日期、数组、对象等,同时还有自定义类的支持,使得它可以处理复杂的数据结构。 3. **序列化与反序列化**:源码中的序列化功能允许将C++...
AMF是一种高效的数据交换格式,常用于Adobe Flex和Adobe Flash Player与服务器之间的通信,它能快速序列化和反序列化数据,提高Web服务的性能。 AMF的核心特点包括: 1. **高效性**:相比于XML或其他文本格式,AMF...
AMF3可以处理各种类型的数据,包括基本类型(如字符串、数字、布尔值)、复杂类型(如对象、数组、日期、XML)以及自定义类。 2. **Lua-Amf功能**:这个库主要提供两个核心功能——AMF数据的解析(Deserialization...
在实际应用中,AMF常用于游戏服务器通信、实时数据交换、富互联网应用(RIA)等场景。理解并掌握AMF编码解码不仅有助于优化数据传输,还能提升应用程序的性能。通过这个易语言的AMF编码解码演示版,开发者能够深入...
6. **兼容性**:AMF0是Adobe Flash Player和Flex SDK之间的标准通信协议,但也有第三方库支持其他平台的AMF0实现,如Python、Java和PHP等。 7. **安全性**:虽然AMF0提供了高效的传输方式,但它并不提供内置的安全...