`
shlei
  • 浏览: 282765 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

动态配置AMF与后台接口调用

阅读更多
以下是一个AMF调用类:
package common
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.utils.ByteArray;
	import flash.utils.Dictionary;
	
	import mx.controls.Alert;
	import mx.core.FlexGlobals;
	import mx.messaging.ChannelSet;
	import mx.messaging.channels.AMFChannel;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.RemoteObject;
	
	
	public class SimpleAmf
	{
		public function SimpleAmf(v:SingletonTemp,sourceData:String,url:String=null ){
			_dispatcher = new EventDispatcher();
			_service = new mx.rpc.remoting.RemoteObject();
			
			_nonPollingChannelSet = new mx.messaging.ChannelSet();		
			_pendingOperations = new flash.utils.Dictionary();
			_cachedOperations = new Array();
			_serviceUrl = url;
			_sourceData = sourceData;
			
			initChannels();
			
			_service.addEventListener(mx.rpc.events.FaultEvent.FAULT, serviceFaultHandler);
		}
		
		/**
		 * destination初始化
		 */
		protected function initChannels():void{
			_service.requestTimeout = _requestTimeout;
			_service.source = _sourceData;//"ssoc.AssetService";
			_service.destination = "amfphp";
			_service.source= _sourceData;
			_service.endpoint = _serviceUrl;
		}
		
		/**
		 * SimpleAmf单例模式
		 * */
		public static function instance(source:String,url:String=null):SimpleAmf{
			
			if ( url == null ){
				url = FlexGlobals.topLevelApplication._host;//要传入的gateway从全局变量中取,如:http://192.168.1.146/ssoc/phpserver/gateway.php
			}
			var key:String = url + "/" + source; //md5.hash( _binKey ).toString();
			if( null == _instanceHash[key] ){
				var server:SimpleAmf = new SimpleAmf(new SingletonTemp(),source,url);
				_instanceHash[key] = server;//把调用的后台接口类存入数组,这样第二次就可直接调用了
			}
			
			return _instanceHash[key];
		}
		
		/**
		 * 
		 * @param Operation
		 * @param eventType
		 * @param arguments
		 * @param bRecallOnError
		 * 
		 */
		protected function startRemoteOperation(Operation:String, eventType:String, arguments:Object,callback:Function=null, bRecallOnError:Boolean=true):void{
			var requestData:AmfRequestData = new AmfRequestData(eventType);
			requestData.operation = _service.getOperation(Operation);
			requestData.callback = callback;
			requestData.recallOnError = bRecallOnError;
			
			requestData.operation.arguments = arguments;
			requestData.token = requestData.operation.send();
			
			_pendingOperations[requestData.token] = requestData;
			return;
		}
		
		/**
		 * 
		 * @param token
		 * @param arg2
		 * @return 
		 * 
		 */        
		protected function finishRemoteOperation(token:mx.rpc.AsyncToken, arg2:Boolean=true):AmfRequestData{
			var requestData:*;
			requestData = this._pendingOperations[token] as AmfRequestData;
			if (requestData == null)
			{
				return null;
			}
			delete _pendingOperations[token];
			
			return requestData;
		}
		
		/**
		 * callback(success:Boolean,response:Object,arguments:Object)
		 * @success 是否调用城功
		 * @response 返回的数据
		 * @arguments 传入的调用参数
		 * */
		private function onDefaultGetHandler(resultEvent:mx.rpc.events.ResultEvent):void{	
			var requestData:AmfRequestData = finishRemoteOperation(resultEvent.token);	
			if ( requestData.callback != null ){
				requestData.callback(true,resultEvent.result,requestData.operation.arguments);
			}			
		}
		
		/**
		 * 异常处理
		 */
		private function serviceFaultHandler(event:FaultEvent):void{
			var requestData:AmfRequestData = finishRemoteOperation(event.token);	
			if ( requestData.callback != null ){
				requestData.callback(false,event.fault.faultString,requestData.operation.arguments);				
			}
		}
		
		/**
		 * 请求调用函数
		 */
		public function request( operation:String, arguments:Object,callback:Function=null, eventType:String=null ):void{
			
			_service.getOperation(operation).addEventListener(mx.rpc.events.ResultEvent.RESULT, onDefaultGetHandler);			
			
			startRemoteOperation( operation, eventType , arguments,callback );
		}
		
		protected var _pendingOperations:flash.utils.Dictionary;
		protected var _service:mx.rpc.remoting.RemoteObject;
		protected var _requestTimeout:int=120;
		protected var _dispatcher:EventDispatcher;
		protected var _cachedOperations:Array;
		protected var _nonPollingChannelSet:mx.messaging.ChannelSet;
		private var _serviceUrl:String=null;
		private var _sourceData:String=null;
		
		private static var _instanceHash:Dictionary = new Dictionary();		
	}
}

class AmfRequestData{
	
	public function AmfRequestData(_eventType:String=null){
		eventType = _eventType;
		return;
	}
	
	public var callback:Function=null;	
	public var eventType:String=null;	
	public var operation:mx.rpc.AbstractOperation=null;	
	public var recallOnError:Boolean=false;	
	public var token:mx.rpc.AsyncToken=null;
}

class SingletonTemp{};


调用方法:
/**
 * @SsocService 后台接口调用类
 * @getp_asset_eventCount 调用接口
 * @[bTime,eTime,"I",ip]调用接口传入参数,必须放到数组中
 * @getp_asset_eventCountHandler 回调函数名
 */
SimpleAmf.instance("SsocService").request("getp_asset_eventCount",[bTime,eTime,"I",ip],getp_asset_eventCountHandler);


回调函数:
/**
 * callback(success:Boolean,response:Object,arguments:Object)
 * @success 是否调用城功
 * @response 返回的数据
 * @arguments 传入的调用参数
 * */
private function getp_asset_eventCountHandler(success:Boolean,response:Object,arguments:Object):void
{
				
}
分享到:
评论

相关推荐

    AMF-JavaScript后台管理框架v1.0

    欢迎使用 JavaScript 后台管理框架 - AMF AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6 *、Firefox x 、Chrome x 、Safari x 、Opera x 等浏览器。 02) 快速: 基于...

    AMF-JavaScript 后台管理框架 v1.0

    欢迎使用 JavaScript 后台管理框架 - AMF AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6+*、Firefox x+、Chrome x+、Safari x+、Opera x+等浏览器。 02) 快速...

    PHP 反序列化解码Flash AMF

    调用例子: $amf = new AMFObject($data); //$data为AMF数据 $deserializer = new AMFDeserializer($amf->rawData); $deserializer->deserialize($amf); $AMF = $deserializer->getAMFObject(); //解码结果

    Android调用AMF

    《如何在Android中解析AMF 》一文的源代码

    AMF-JavaScript 后台管理框架.7z

    AMF-可应用于网站后台、系统管理等领域。 01) 兼容: 天衣无缝的兼容性能,可完美运行于IE5.5\6+*、Firefox X+、Chrome X+、Safari X+、Opera X+等浏览器。 02) 快速: 基于JavaScript原生态开发,运行快速高效、...

    AMF.NET 文件极小的开源AMF解析库

    AMF开源FluorineFx文件太大 对于只需要序列化和反序列化AMF数据流的朋友,这个库是不错的选择 支持.net 1.1和2.0+

    AMF数据分析器_V22

    支持AMF格式的通信封包编码、解码、向AMF服务端发送请求、返回AMF数据解析。 支持RTMP封包编码、解码。 支持Flex外部化类的AMF编码、解码。 支持解压还原LZMA算法压缩过的SWF文件(文件头三字节为:ZWS的 *.SWF...

    RTMP协议中AMF的定义.pdf

    《RTMP协议中AMF的定义》,原名《TheAMF》英文版本。 内容简介: The AMF object is used for the sending and receiving of all video/audio data. After the initial handshake, all objects sent use the AMF ...

    易语言amf解析构造

    易语言amf解析构造源码,amf解析构造,分析amf,取短整数_字节集,时间到双精度,到时间_双精度,取整数_字节集,integer_字节集,取双精度_字节集,amf3型数据,十六进制转字节集,分析数据段,解析amf数据,解析amf3数据,Utf8转...

    AMF1.0(AMP).zip

    AMF1.0(AMP).zip 代码

    amf0 原版文档 完整版

    amf0 原版文档 完整版

    AMF3 C++ 源码库码库

    AMF3 C++ AMF3 C++ 源码库码库

    AMF协议源码

    AMF源码 AMF源码欢迎下载

    AMF AMD Radeon硬件编码ffmpeg编译库源码

    Advanced Media Framework AMF AMD Radeon硬件编码ffmpeg编译库源码 The AMF framework is compatible with most recent Radeon GPUs starting with the Southern Islands family and APUs of the Kabini, Kaveri, ...

    AMF数据分析器

    用于分析AMF数据分析的工具,使用简单方便,帮助提高AMF分析效率

    amf解析,json解析 格式化

    用于 分析 解析amf数据包,以便开发或修改接口,具体请看工具提示

    易语言源码易语言amf解析构造源码.rar

    易语言源码易语言amf解析构造源码.rar 易语言源码易语言amf解析构造源码.rar 易语言源码易语言amf解析构造源码.rar 易语言源码易语言amf解析构造源码.rar 易语言源码易语言amf解析构造源码.rar 易语言源码...

    dart_amf:AMF 和 blazeds 的原生Dart接口

    DartAmf 使用 AMF 为 BlazeDS 后端提供了原生 Dart 接口。 它使用 dart:html HttpRequest 所以它可以在浏览器中工作,但不太可能在没有修改的情况下从命令行工作。 很大程度上基于修改后的 2.0 许可证),它基于 ...

    AMF手把手教程

    AMF类网页游戏的分析,用于数据抓包等 。AMF手把手教程。分析网页游戏的第一步。

Global site tag (gtag.js) - Google Analytics