- 浏览: 32296 次
- 性别:
- 来自: 上海
最近访客 更多访客>>
最新评论
-
myjave:
哦 是我搞错了这个怎么使用
ArtDigit 艺术数字类 -
myjave:
这个类拷贝靠flash里报错
ArtDigit 艺术数字类
AS3版Flash Remoting客户端类-Service类
这段时间在研究Flash Remoting技术,之前在Flash里调用Remoting的话,只能通过NetConnection类调用,但写起来比较麻烦,同时方法调用不直观。
而在Flex里用RemoteObject类用起来比较直观,但它是集成在Flex里了,功能还挺复杂,还在Flash里不方便调用,所以我参考RemoteObject类写了一个简化的AS3版类-Service类,我现在把相关代码共享出来。
Service类
这段时间在研究Flash Remoting技术,之前在Flash里调用Remoting的话,只能通过NetConnection类调用,但写起来比较麻烦,同时方法调用不直观。
而在Flex里用RemoteObject类用起来比较直观,但它是集成在Flex里了,功能还挺复杂,还在Flash里不方便调用,所以我参考RemoteObject类写了一个简化的AS3版类-Service类,我现在把相关代码共享出来。
Service类
package com.klstudio.net.remoting { import flash.net.NetConnection; import flash.events.EventDispatcher; import flash.events.Event; import flash.events.IEventDispatcher; import flash.events.AsyncErrorEvent; import flash.events.IOErrorEvent; import flash.events.NetStatusEvent; import flash.events.SecurityErrorEvent; import flash.utils.flash_proxy; import flash.utils.Proxy; import flash.utils.Dictionary; /** * Remoting服务 * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ [Event(name="fault", type="com.klstudio.events.FaultEvent")] [Event(name="result", type="com.klstudio.events.ResultEvent")] [Event(name="netStatus", type="flash.events.NetStatusEvent")] [Event(name="ioError", type="flash.events.IOErrorEvent")] [Event(name="securityError", type="flash.events.SecurityErrorEvent")] dynamic public class Service extends Proxy implements IEventDispatcher { private var _gateway : String; private var _nc : NetConnection; private var _destination : String; private var _dispatcher : EventDispatcher; private var _operations : Dictionary; /** * 构建 * @param gateway remoting网关地址 * @param destination remoting目标地址 * @param objectEncoding remoting编码(amf0/amf3) */ public function Service(gateway : String,destination : String,objectEncoding : uint = 3) { _operations = new Dictionary(true); _gateway = gateway; _destination = destination; _dispatcher = new EventDispatcher(this); _nc = new NetConnection(); _nc.client = this; _nc.objectEncoding = objectEncoding; _nc.addEventListener(NetStatusEvent.NET_STATUS, ncHandler); _nc.addEventListener(IOErrorEvent.IO_ERROR, ncHandler); _nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ncHandler); _nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, ncHandler); _nc.connect(_gateway); } /** * public */ /** * 设置安全证书的用户名和密码 * @param userName 用户名 * @param password 密码 */ public function setRemoteCredentials(userName : String,password : String) : void { _nc.addHeader("Credentials", false, { userid : userName, password : password }); } /** * remoting网关地址 */ public function get gateway():String{ return _gateway; } /** * remoting目标地址 */ public function get destination():String{ return _destination; } public function set destination(value:String):void { _destination = value; } /** * remoting编码 */ public function get objectEncoding():uint{ return _nc.objectEncoding; } public function set objectEncoding(value:uint):void{ _nc.objectEncoding = value; } /** * remoting连接 */ public function get connenction():NetConnection{ return _nc; } public function toString() : String { return "[Service gateway="+gateway+", destination="+destination+", objectEncoding="+objectEncoding+"]"; } /** * private */ private function ncHandler(event : Event) : void { switch(event.type){ case AsyncErrorEvent.ASYNC_ERROR: break; default: dispatchEvent(event); } } private function getOperation(name:String):Operation{ var operation:Operation = _operations[name]; if(operation == null) { operation = new Operation(this,name); _operations[name] = operation; } return operation; } private function getLocalName(name:*):String{ if(name is QName){ return QName(name).localName; } return String(name); } /** * proxy */ override flash_proxy function getProperty(name : *) : * { return getOperation(getLocalName(name)); } override flash_proxy function callProperty( methodName : *, ...parametres : * ) : * { return getOperation(getLocalName(methodName)).send.apply(null,parametres); } /** * IEventDispatcher */ public function dispatchEvent(event : Event) : Boolean { // TODO: Auto-generated method stub return _dispatcher.dispatchEvent(event); } public function hasEventListener(type : String) : Boolean { // TODO: Auto-generated method stub return _dispatcher.hasEventListener(type); } public function willTrigger(type : String) : Boolean { // TODO: Auto-generated method stub return _dispatcher.willTrigger(type); } public function removeEventListener(type : String, listener : Function, useCapture : Boolean = false) : void { _dispatcher.removeEventListener(type, listener, useCapture); } public function addEventListener(type : String, listener : Function, useCapture : Boolean = false, priority : int = 0, useWeakReference : Boolean = false) : void { _dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference); } } } </textarea> <br /> Operation类<br /> <textarea name="code" class="java" cols="45" rows="5">package com.klstudio.net.remoting { import com.klstudio.events.FaultEvent; import com.klstudio.events.ResultEvent; import flash.net.Responder; import flash.events.EventDispatcher; /** * Operation * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ [Event(name="fault", type="com.klstudio.events.FaultEvent")] [Event(name="result", type="com.klstudio.events.ResultEvent")] public class Operation extends EventDispatcher { private var _service:Service; private var _name:String; private var _responder:Responder; public function Operation(service:Service,name:String) { _service = service; _name = name; _responder = new Responder ( resultHandler, statusHandler ); } /** * public */ public function get service():Service{ return _service; } public function get name():String{ return _name; } public function send(...args:Array):void{ var params:Array = [_service.destination + "." + _name,_responder]; params = params.concat(args); _service.connenction.call.apply(_service.connenction,params); } override public function toString():String{ return "[Operation name="+name+"]"; } /** * private */ private function resultHandler(info:Object):void{ var event:ResultEvent = new ResultEvent(ResultEvent.RESULT, info); if(hasEventListener(ResultEvent.RESULT)){ dispatchEvent(event); }else { _service.dispatchEvent(event); } } private function statusHandler(info:Object):void{ var fault:Fault = new Fault(info["code"], info["message"],info["details"]); var event:FaultEvent = new FaultEvent(FaultEvent.FAULT, fault); if(hasEventListener(FaultEvent.FAULT)){ dispatchEvent(event); }else{ _service.dispatchEvent(event); } } } } </textarea> <br /> Fault类<br /> <textarea name="code" class="java" cols="45" rows="5">package com.klstudio.net.remoting { /** * Fault * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ public class Fault extends Error { public var rootCause : Object; public var content : Object; protected var _faultCode : String; protected var _faultString : String; protected var _faultDetail : String; public function Fault(faultCode : String, faultString : String, faultDetail : String = null) { super("faultCode:" + faultCode + " faultString:\'" + faultString + "\' faultDetail:\'" + faultDetail + "\'"); _faultCode = faultCode; _faultString = faultString ? (faultString) : (""); _faultDetail = faultDetail; } public function get faultString() : String { return _faultString; } public function toString() : String { var str : String = "[Fault"; str = str + (" faultString=\"" + faultString + "\""); str = str + (" faultCode=\"" + faultCode + "\""); str = str + (" faultDetail=\"" + faultDetail + "\"]"); return str; } public function get faultCode() : String { return _faultCode; } public function get faultDetail() : String { return _faultDetail; } } } </textarea> <br /> FaultEvent类<br /> <textarea name="code" cols="45" rows="5" class="java">package com.klstudio.events { import com.klstudio.net.remoting.Fault; import flash.events.Event; /** * FaultEvent * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ public class FaultEvent extends Event { public static const FAULT : String = "fault"; public var fault : Fault; public function FaultEvent(type : String, fault : Fault,bubbles : Boolean = false, cancelable : Boolean = false) { super(type, bubbles, cancelable); this.fault = fault; } } } </textarea> <br /> ResultEvent类 <br /> <textarea name="code" class="java" cols="45" rows="5">package com.klstudio.events { import flash.events.Event; /** * ResultEvent * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ public class ResultEvent extends Event { public static const RESULT:String = "result"; public var result : Object; public function ResultEvent(type : String, result : Object,bubbles : Boolean = false, cancelable : Boolean = false) { super(type, bubbles, cancelable); this.result = result; } } } </textarea> <br /> 调用实例<br /> <textarea name="code" class="java" cols="45" rows="5">package test { import com.klstudio.events.FaultEvent; import com.klstudio.events.ResultEvent; import flash.events.Event; import flash.events.MouseEvent; import com.klstudio.net.remoting.Service; import flash.display.Sprite; /** * * @author Kinglong(kinglong@gmail.com) * @since:2010-8-3 */ public class TestRemoting extends Sprite { private var _service:Service; public function TestRemoting() { _service = new Service("http://localhost:8080/test/messagebroker/amf","Remoting"); _service.addEventListener(FaultEvent.FAULT, faultHandler); stage.addEventListener(MouseEvent.CLICK, stageHandler); } private function stageHandler(event:Event):void{ _service.getTitle.addEventListener(ResultEvent.RESULT,getTitleHandler); _service.getTitle(); } private function getTitleHandler(event:ResultEvent):void{ trace("result>" + event.result); } private function faultHandler(event:FaultEvent):void{ trace(event.fault.toString()); } } }
发表评论
-
ArtDigit 艺术数字类
2012-07-28 00:01 979此类主要用于使用动画元件来显示对应的数字,并支持数字缓冲滚动显 ... -
Cookie类第三版
2012-07-28 00:01 901针对原来Cookie类使用起来不太方便,去掉用不上的冗余方法, ... -
位图工具BitmapDataUtil类-getImageMapVector方法演示
2012-07-27 15:35 0今天把BitmapDataUtil工具类中的getImageM ... -
位图工具BitmapDataUtil类-getRealImageRect方法演示
2012-07-28 00:02 1048位图是flash众多类,使用很频繁的一个,我这边根据自己的实际 ... -
flash动画编程学习研究-机器人传球演示
2012-07-27 15:31 931这几天在看Keith Peters的书《Foundation ... -
排序算法演示
2012-07-28 00:01 898下面是排序算法演示程序,比较直观显示排序算法运行规律 该演 ... -
常用数据集合类-Map,Queue,Stack,Collection,List,Set
2012-07-28 00:01 1105之前写过一次有关常用数据集合类,但今天简单回顾了一下, ... -
Flash算法-摆动算法
2012-07-27 15:22 1282[代码] package com.klstudio.algor ... -
Flash游戏-SlidingPuzzle滑块拼图游戏
2012-07-27 15:18 866最近在研究Flash游戏的算法,发现同一种游戏能有很多种算法, ... -
优化Flash平台的性能(Adobe提供)
2012-07-27 15:13 839今正好看到了“优化Flash平台的性能&a ... -
[AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
2007-08-18 15:56 1700[AS3]URLLoader+URLRequest+JPGEn ... -
[AS3]FLVStream类-检测flv文件类型的工具类
2007-08-06 09:20 614[AS3]FLVStream类-检测flv文件类型的工具类 ... -
[AS3]Flash在线图片编辑器
2007-07-24 06:39 5032[AS3]Flash在线图片编辑器 进行二个星期,终于把 ... -
[AS3]更新Tracer组件并公布控制台源程序
2007-07-23 02:42 335此次更新版本到1.2,修正一些对象的显示Bug; 由于原来 ... -
[AS3]Tracer-Flash代码调试类
2007-07-19 11:01 533[AS3]Tracer-Flash代码调试类【组件版本】:1. ... -
[AS1]三帧代码实现图片轮换显示
2007-07-08 02:08 508[AS1]三帧代码实现图片轮换显示本来这段代码是写给我的一个网 ... -
[AS3]IconDataManager-图标数据管理类
2007-07-06 08:00 386[AS3]IconDataManager-图标数据管理类【功能 ... -
有关“Flash在线图片编辑”功能的开发进度1
2007-07-03 10:30 2139有关“Flash在线图片编辑”功能的开发进度1 实现在线对 ... -
[AS3]DisplayEffect组件
2007-06-28 08:08 407[AS3]DisplayEffect组件【组件版本】:0.5【 ... -
[AS3]ImageEffect组件版本更新
2007-06-27 15:16 418[AS3]ImageEffect组件版本更新 【组件版本】 ...
相关推荐
.net remoting 客户端与服务器相互通讯 完整版
flex-messaging-remoting.jarflex-messaging-remoting.jarflex-messaging-remoting.jarflex-messaging-remoting.jar
shale-remoting 1.0.4
在Remoting中处理事件其实并不复杂,但其中有些技巧需要你去挖掘出来。正是这些技巧,仿佛森严的壁垒,让许多人望而生畏,或者是不知所谓,最后放弃了事件在Remoting的使用。关于这个主题,在网上也有很多讨论,相关...
C# remoting服务端建立与客户端的调用示例,分享给大家,共同学习。
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
Remoting技术,不同程序之间访问,修改其他程序数据。
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包
java运行依赖jar包