`
diding
  • 浏览: 81638 次
  • 性别: Icon_minigender_1
  • 来自: 四川
社区版块
存档分类
最新评论

纯AS的RemoteAMF3

    博客分类:
  • Flex
阅读更多
[纯AS的RemoteAMF3]


目前支持:AMFPHP,CFC,Fluorine,LCDS

一.怎么使用
//指明amfURL
var amfChannelUri:String="http://192.168.1.102/CompanyWebSite/amfphp/gateway.php";
//AMF服务
var AMFServer:String="amfphp"
//单例,包地址,amfURL
var MyAMFDM:AMFDataManager=AMFDataManager.getDataManager(AMFServer,"website.admin.LoginPage",amfChannelUri)
//执行方法名,有参数可带参数
MyAMFDM.makeRemoteCall("doLogin","帝鼎","zx8974sczzez21dd")
//侦听
MyAMFDM.addEventListener(ResultEvent.RESULT, myResultHandler);
MyAMFDM.addEventListener(FaultEvent.FAULT, handleFault);  


二.简单例子

1.整合FluorineFX的例子:
MXML:(注,这是在Flex4 SDK下编译的)
<?xml version="1.0" encoding="utf-8"?>
<Application xmlns="http://ns.adobe.com/mxml/2009" 
	layout="absolute"
	 creationComplete="DDinit();">
	<Script source="AppAS/FluorineFX.as"/>
	</Application>


FluorineFX.as:

import mx.collections.ArrayCollection;
	import mx.events.ResizeEvent;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import net.diding.managers.AMFDataManager;
	
	private var IDArray:Array;
	private var userNameArray:Array;
	private var userPWDArray:Array;
	private var items:ArrayCollection

	/************************************************
	 * FluorineFX
	* **********************************************/
	private function DDinit():void{
		var amfChannelUri:String="http://192.168.1.102/MSWeb/Gateway.aspx";	   
		var AMFServer:String="fluorine"
		var MyAMFDM:AMFDataManager=AMFDataManager.getDataManager(AMFServer,"net.diding.CheckUser",amfChannelUri)
		MyAMFDM.makeRemoteCall("GetData");
	    MyAMFDM.addEventListener(ResultEvent.RESULT, myResultHandler);
	    MyAMFDM.addEventListener(FaultEvent.FAULT, handleFault);  
	}
	
	private function myResultHandler(rs:ResultEvent):void{
		trace(rs.result)
		var re:Array=rs.result.tables.serverInfo.initialData as Array;
		var TableInfoLength:Number=rs.result.tables.serverInfo.columnNames.length;
		var cant:Number = rs.result.tables.serverInfo.totalCount;  
		IDArray=[];
		userNameArray=[];
		userPWDArray=[]  
		
		for(var i:int=0; i<re.length;i++){
			for(var j:int=0;j<TableInfoLength;j++){
				var columName:String=rs.result.tables.serverInfo.columnNames[j];
				switch(columName){
					case "id":
					IDArray.push(re[i][j]);
					break;
					case "userName":
					userNameArray.push(re[i][j]);
					break;
					case "userPWD":
					userPWDArray.push(re[i][j]);
					break;
				}
		  }	
		 }
		 ShowList(IDArray,userNameArray,userPWDArray)
		
		}
		private function ShowList(IDArray:Array,userNameArray:Array,userPWDArray:Array):void{
               items = new  ArrayCollection();
               items.removeAll();
                for(var i:int =0;i<IDArray.length;i++)
                {
                    var obj:Object = new Object();
                    obj.id = IDArray[i];
                    obj.userName=userNameArray[i];
                    obj.userPWD=userPWDArray[i];
                    items.addItem(obj);
                }
              //MyDataDG.dataProvider=items;
           }
	
	private function handleFault(event:FaultEvent):void{
		trace("error==="+event)
	}


2.整合AMFPHP1.9的例子:
MXML:同上,只需要改变
<Script source="AppAS/AMFPHP1.9.as"/>即可

AMFPHP1.9.as
import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import net.diding.managers.AMFDataManager;


	private function DDinit():void{
		/************************************************
	   * AMFPHP1.9 
	   * **********************************************/
	    var amfChannelUri:String="http://192.168.1.102/CompanyWebSite/amfphp/gateway.php";
		var AMFServer:String="amfphp"
		var MyAMFDM:AMFDataManager=AMFDataManager.getDataManager(AMFServer,"website.admin.LoginPage",amfChannelUri)
		MyAMFDM.makeRemoteCall("doLogin","帝鼎","zx8974sczzez21dd")
	    MyAMFDM.addEventListener(ResultEvent.RESULT, myResultHandler);
	    MyAMFDM.addEventListener(FaultEvent.FAULT, handleFault);  
	}
	
	
	/*******************************************
    * @amfphp返回
	* ******************************************/	 
	private function myResultHandler(event:ResultEvent):void{
		var RData:Boolean=event.result as Boolean 
		ShowAMFPHPReturnData(RData)
	     
	}

	private function ShowAMFPHPReturnData(RData:Boolean):void{
		trace(RData)
	}

	private function handleFault(event:FaultEvent):void{
		trace("error==="+event)
	}


3.整合Flex+ColdFusion_CFC+Jrun+MySQL2005
MXML:同上,只需要改变
<Script source="AppAS/Flex_CFC_Jrun_MySQL2005.as"/>即可

Flex_CFC_Jrun_MySQL2005.as
import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	import net.diding.managers.AMFDataManager;

	private function DDinit():void{
		/************************************************
	  * Coldfusion CFC
	  * **********************************************/
		var amfChannelUri:String="http://192.168.1.102:8300/flex2gateway/";
		var AMFServer:String="ColdFusion"
		var MyAMFDM:AMFDataManager=AMFDataManager.getDataManager(AMFServer,"DidingCFC.helloworld",amfChannelUri)
		MyAMFDM.makeRemoteCall("sayHello")
	    MyAMFDM.addEventListener(ResultEvent.RESULT,myResultHandler);
	    MyAMFDM.addEventListener(FaultEvent.FAULT, handleFault);  
	}
	
	private function myResultHandler(event:ResultEvent):void{
		
		  /*******************************************
	      * @CFC返回
	      * ******************************************/
	      var rs:Object=event.result as Object
	      ShowCFCReturnData(rs)
	}
	
	private function ShowCFCReturnData(rs:Object):void{
		for(var i:int=0; i<rs.length; i++){
			trace(rs[i].id)
			trace(rs[i].userName);
			trace(rs[i].userPWD)
		}
	}
	
	private function handleFault(event:FaultEvent):void{
		trace("error==="+event)
	}


4.整合Flex+LCDS+Jrun+MSSQL2005
MXML:同上,只需要改变
<Script source="AppAS/Flex_LCDS_Jrun_MSSQL2005.as"/>即可

Flex_LCDS_Jrun_MSSQL2005.as

	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	import net.diding.managers.AMFDataManager;

	private function DDinit():void{
	 /************************************************
	  * LCDS不支持指定源,所以第二个参数设为null,Jrun配置
	  * **********************************************/
	   var amfChannelUri:String="http://192.168.1.102:8600/blazeds/messagebroker/amf"
	  var AMFServer:String="TestJavaMySQL"
	  var MyAMFDM:AMFDataManager=AMFDataManager.getDataManager(AMFServer,"net.diding.ReadFlexJavaData",amfChannelUri)
	  MyAMFDM.makeRemoteCall("getNotices")
	  MyAMFDM.addEventListener(ResultEvent.RESULT, myResultHandler);
	  MyAMFDM.addEventListener(FaultEvent.FAULT, handleFault);  
	}
	
	 /*******************************************
	  * @LCDS返回
	 * ******************************************/
	private function myResultHandler(event:ResultEvent):void{     
	     var rs:Object=event.result as Object
	     ShowAMFLCDSReturnData(rs)
	     
	}

	private function ShowAMFLCDSReturnData(RData:Object):void{
		for(var j:int=0;j<RData.length;j++){
		  trace(RData[j].userName)
	      }	
	}
	private function handleFault(event:FaultEvent):void{
		trace("error==="+event)
	}



三.AS RemoteAMF3类源码:


AMFDataManager.as

package net.diding.managers
{
	import flash.events.EventDispatcher;
	import mx.managers.CursorManager;
	import mx.messaging.Channel;
	import mx.messaging.ChannelSet;
	import mx.messaging.channels.AMFChannel;
	import mx.rpc.AbstractOperation;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.rpc.remoting.mxml.RemoteObject;

	/*************************************************************
	 * --AMFDataManager--
	 * @四川资中二中 帝鼎2008.06
	 * 单例类,先创建类,然后用创建的类调用getDataManager();
	 * 目前支持:AMFPHP1.9,CFC,FluorineFx,LCDS
	 * ***********************************************************/

	public class AMFDataManager extends EventDispatcher
	{
		private var CFsvc:RemoteObject;
		private var CFSource:String;
		private static var instanceMap:Object=new Object();
		private var amfChannelSet:ChannelSet

		public function AMFDataManager(pri:PrivateTempClass, dest:String, CFSource:String, amfChannelURI:String)
		{
			this.CFsvc=new RemoteObject();
			CFsvc.destination=dest;
			CFsvc.source=CFSource;
			CFsvc.showBusyCursor=true;
			setUpAmfChannel(amfChannelURI)
		}


		public function setUpAmfChannel(amfChannelURI:String):void
		{
			var amfChannelID:String=JudgeAMFSvc(amfChannelURI)
			var amfChannel:Channel=new AMFChannel(amfChannelID, amfChannelURI)
			amfChannelSet=new ChannelSet();
			amfChannelSet.addChannel(amfChannel);
			this.CFsvc.channelSet=amfChannelSet;

		}

		private function JudgeAMFSvc(gAMFSvc:String):String
		{
			var returnSvcKind:String;

			var num:Number=gAMFSvc.lastIndexOf("/");
			var theString:String=gAMFSvc.substring(num + 1);
			//cfc
			if (theString.length == 0)
			{
				returnSvcKind="my-cfamf"
			}
			else
			{
				//amfphp
				if (theString == "gateway.php")
				{
					returnSvcKind="my-amfphp";
				}
				else 
				//fluorine
				if (theString == "Gateway.aspx")
				{
					returnSvcKind="my-amf"
				}
				else 
				//java
				if (theString == "amf")
				{
					returnSvcKind="my-amf"
				}
			}
			return returnSvcKind;
		}


		public static function getDataManager(CFsvc:String, Source:String, amfChannelURI:String):AMFDataManager
		{
			var CFSource:String=Source;
			if (AMFDataManager.instanceMap[CFSource] == null)
			{
				AMFDataManager.instanceMap[CFSource]=new AMFDataManager(new PrivateTempClass(), CFsvc, CFSource, amfChannelURI);
			}
			var MyAMFDM_ER:AMFDataManager=AMFDataManager.instanceMap[CFSource];
			return MyAMFDM_ER;
		}


		public function makeRemoteCall(methodName:String, ... args:Array):void
		{
			var op:mx.rpc.AbstractOperation=CFsvc[methodName];
			op.makeObjectsBindable=true;
			CFsvc.addEventListener(ResultEvent.RESULT, doResults);
			CFsvc.addEventListener(FaultEvent.FAULT, doFault);
			if (args.length > 0)
			{
				op.send.apply(null, args);
			}
			else
			{
				op.send();
			}
		}

		private function doResults(result:ResultEvent):void
		{
			CursorManager.removeBusyCursor();
			dispatchEvent(new AMFResultEvent(ResultEvent.RESULT, false, true, result.result));
		}


		private function doFault(fault:FaultEvent):void
		{
			CFsvc.showBusyCursor=false
			this.dispatchEvent(fault);

		}
	}
}

class PrivateTempClass
{
	public function PrivateTempClass()
	{
	}
}





AMFResultEvent.as

package net.diding.managers
{
	import flash.events.Event;
	import mx.messaging.messages.IMessage;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.ResultEvent;

	public class AMFResultEvent extends ResultEvent
	{
		public function AMFResultEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=true, result:Object=null, token:AsyncToken=null, message:IMessage=null)
		{
			super(type, bubbles, cancelable, result, token, message);
		}

		override public function clone():Event
		{
			return new AMFResultEvent(type, bubbles, cancelable, result, token, message);
		}
	}
}

1
0
分享到:
评论

相关推荐

    as3 视频播放器 纯as3

    【标题】:“AS3 视频播放器 纯AS3” 在AS3(ActionScript 3)中创建一个视频播放器是一项常见的任务,尤其对于Web开发者和多媒体设计师来说。AS3是Adobe Flash Professional和Flex Builder等工具所使用的编程语言...

    纯as3链接本地数据库

    标题"纯AS3链接本地数据库"暗示我们将不依赖任何外部库,如asSQL-Beta2.8.swc或rps.swc,而是使用AS3的原生功能来实现这一目标。这通常意味着我们需要构建自定义的通信层,以便与MySQL数据库进行交互。 在AS3中,...

    as3corelib-.92.11.rar_as 3 corelib_as3_as3corelib_as3corelib API

    AS3CoreLib是ActionScript 3(AS3)的一个重要扩展库,被广泛用于增强标准AS3类库的功能。这个库是由Adobe官方推荐的,它提供了许多实用的工具和类,帮助开发者更高效地处理各种任务,如图像处理、数组操作、网络...

    纯AS3图片切换效果-包括渐变,电视墙,滴水融化,百叶窗,拉滑块,划入

    在本文中,我们将深入探讨如何使用ActionScript 3(AS3)实现各种图片切换效果,如渐变、电视墙、滴水融化、百叶窗、拉滑块和划入等。ActionScript是Adobe Flash Professional和Flex SDK中的主要编程语言,用于创建...

    纯as3写的贪吃蛇游戏源码。比较简单……

    本文将围绕一个纯AS3编写的贪吃蛇游戏源码进行深度剖析,帮助读者理解游戏的实现机制,进一步提升AS3编程技能。 贪吃蛇游戏,作为一款经典的游戏,其简单易懂的规则和高度可玩性使其深受玩家喜爱。这款游戏的核心...

    纯as3写的打砖块游戏。简单。

    《纯AS3实现的打砖块游戏解析》 在IT行业中,游戏开发是一项充满挑战与乐趣的任务,而ActionScript 3(简称AS3)作为Adobe Flash Platform的主要编程语言,为开发者提供了丰富的工具来构建交互式的网页应用和游戏。...

    纯AS3 简单切图工具源码

    【纯AS3 简单切图工具源码】是一个基于Adobe ActionScript 3.0(AS3)开发的应用程序,用于将大图分割成多个小图。此工具的目的是提供一个基本的功能实现,而非追求复杂的用户界面。由于它依赖于Adobe AIR SDK 3.7,...

    纯AS3做的AIR滑动列表DEMO

    纯AS3做的AIR滑动列表,在设备上触摸滑动效果,

    用纯as 自由画线 用纯as 自由画线

    ```as3 var drawArea:Sprite = new Sprite(); addChild(drawArea); ``` 2. **设置绘图路径**:在`Sprite`对象上,我们需要创建一个`Graphics`实例,并开启一个新的绘图路径。 ```as3 drawArea.graphics.beginFill...

    AS3 纯代码时钟.rar_AS3时钟_as3_flash as3

    在本项目“AS3 纯代码时钟”中,开发者使用AS3编写了一个时钟应用,这涉及到AS3的基础语法、时间处理和舞台显示对象等知识点。 1. **AS3基础语法**:AS3是面向对象的语言,具有类和对象的概念。在创建时钟的过程中...

    纯AS3下访问WebService方法总汇.txt

    ### 纯AS3下访问WebService方法总汇 在Adobe Flash Platform中,ActionScript 3 (AS3) 提供了多种方法来实现客户端与服务器之间的交互。本文将详细介绍如何使用AS3来访问Web Service,包括具体的实现代码示例。 ##...

    as3纯代码下雨效果

    在本场景中,"as3纯代码下雨效果"指的是利用AS3编写程序来模拟逼真的雨滴下落动画。这种效果通常通过在舞台上动态生成和管理大量图形对象来实现,为观众提供一种沉浸式的视觉体验。 1. **基本概念**: - AS3:...

    纯AS3代码实现百叶窗效果的核心代码

    纯AS3代码实现百叶窗效果的核心代码,希望支持。。。。。

    [心得] 纯As类 Alert

    这篇心得将探讨如何创建一个自定义的纯 AS3 Alert 类,以便更方便地在项目中使用。 首先,我们需要创建一个名为 `Alert` 的类,这个类将包含所有与弹出对话框相关的功能。这个类可以有如下的结构: ```as3 package...

    纯AS3图片切换效果-包括渐变,电视墙,滴水融化,百叶窗,拉滑块,划入。.rar

    标题中的“纯AS3图片切换效果-包括渐变,电视墙,滴水融化,百叶窗,拉滑块,划入”指的是使用ActionScript 3(AS3)编程语言实现的一种动态图片展示技术。AS3是Adobe Flash Professional和Flex Builder等开发工具的...

    Flash as3调用外部AS脚本

    在Flash开发中,ActionScript 3 (AS3) 是一种强大的编程语言,用于创建交互式内容,动画,以及与外部资源进行通信。标题提到的"Flash AS3调用外部AS脚本"是一个常见的需求,特别是在处理复杂逻辑或者代码模块化时。...

    纯AS坦克大战源代码

    【纯AS坦克大战源代码】是一个基于ActionScript 3(AS3)开发的坦克战斗游戏项目,它提供了从设计到实现的完整流程。这个源代码虽然存在一些缺陷,但作为一个学习和娱乐的参考资料,它可以帮助我们深入了解AS3编程在...

    as3帮助文档

    【标题】"AS3(ActionScript 3)帮助文档" 【描述】 ActionScript 3 (AS3) 是Adobe开发的编程语言,主要用于创建富互联网应用程序(RIA),尤其是在Flash平台上。AS3带来了许多与AS2相比的重大改进,包括类型检查、...

    as3.0纯代码MP3播放器

    本项目“as3.0纯代码MP3播放器”是一个完全基于代码实现的音频播放解决方案,没有依赖任何图形用户界面(GUI)组件库,而是通过编写AS3代码来控制MP3文件的播放、暂停、停止、音量调整等功能。下面将详细介绍AS3.0中...

    flash actionscript3 纯AS3代码_资源加载进度条.rar

    本资源“flash actionscript3 纯AS3代码_资源加载进度条.rar”显然是一个关于如何使用AS3实现资源加载进度条的示例代码包。下面将详细探讨AS3中的资源加载和进度条实现相关的知识点。 1. **AS3基本概念** AS3是...

Global site tag (gtag.js) - Google Analytics