refactor RemoteObject and Operation to use AMFNetConnection
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/62408930 Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/62408930 Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/62408930 Branch: refs/heads/feature/amf Commit: 62408930d128f9cfc4f4dabdc3fd4408341111ec Parents: 679268f Author: Alex Harui <[email protected]> Authored: Fri Sep 1 11:18:12 2017 -0700 Committer: Carlos Rovira <[email protected]> Committed: Thu Sep 7 00:24:03 2017 +0200 ---------------------------------------------------------------------- .../flex/org/apache/flex/net/RemoteObject.as | 168 ++----------------- .../org/apache/flex/net/remoting/Operation.as | 75 ++------- 2 files changed, 31 insertions(+), 212 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/62408930/frameworks/projects/Network/src/main/flex/org/apache/flex/net/RemoteObject.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/RemoteObject.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/RemoteObject.as index ee8ef28..7ba349f 100755 --- a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/RemoteObject.as +++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/RemoteObject.as @@ -18,17 +18,6 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.net { - COMPILE::SWF - { - import flash.events.AsyncErrorEvent; - import flash.events.IOErrorEvent; - import flash.events.NetStatusEvent; - import flash.events.SecurityErrorEvent; - import flash.net.NetConnection; - import flash.net.Responder; - import flash.net.ObjectEncoding; - } - import org.apache.flex.core.IBead; import org.apache.flex.core.IStrand; @@ -36,6 +25,7 @@ package org.apache.flex.net import org.apache.flex.net.events.FaultEvent; import org.apache.flex.net.events.ResultEvent; import org.apache.flex.net.remoting.Operation; + import org.apache.flex.net.remoting.amf.AMFNetConnection; import org.apache.flex.reflection.getClassByAlias; import org.apache.flex.reflection.registerClassAlias; @@ -46,6 +36,12 @@ package org.apache.flex.net private var _endPoint:String; private var _destination:String; private var _source:String; + + /** + * @private + * The connection to the server + */ + public var nc:AMFNetConnection = new AMFNetConnection(); /** * @@ -55,12 +51,6 @@ package org.apache.flex.net */ public function RemoteObject() { - COMPILE::SWF - { - nc = new NetConnection(); - nc.objectEncoding = ObjectEncoding.AMF3; - nc.client = this; - } } private var _strand:IStrand; @@ -70,9 +60,6 @@ package org.apache.flex.net _strand = value; } - COMPILE::SWF - public var nc:NetConnection; - public function set endPoint(value:String):void { _endPoint = value; @@ -102,147 +89,20 @@ package org.apache.flex.net public function send(operation:String, params:Array):void { - COMPILE::SWF - { - nc.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); - nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); - nc.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); - nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); - nc.connect(endPoint); - - var op:Operation = new Operation(operation, this, params); - op.send(); - } - COMPILE::JS - { - var amfClient:Object = new ((window as Object).amf).Client(_destination, _endPoint); - var amfReq:Object = amfClient.invoke(_source, operation, params[0]); - amfReq.then(resultHandler , faultHandler); - } + nc.connect(endPoint); + + var op:Operation = new Operation(operation, this, params); + op.send(); } - COMPILE::SWF - private function statusHandler(event:NetStatusEvent):void - { - trace("statusHandler", event.info.code); - } - - COMPILE::SWF - private function securityErrorHandler(event:SecurityErrorEvent):void - { - trace("securityErrorHandler", event); - } - - COMPILE::SWF - private function ioErrorHandler(event:IOErrorEvent):void - { - trace("ioErrorHandler", event); - } - - COMPILE::SWF - private function asyncErrorHandler(event:AsyncErrorEvent):void - { - trace("asyncErrorHandler", event); - } - public function resultHandler(param:Object):void { - COMPILE::JS - { - if(param is Object && param.hasOwnProperty("_explicitType")) - { - param = typeUntypedObject(param); - } - else if (param is Array && param.length > 0) - { - for(var i:uint ; i < param.length ; i++) - { - var typedObj:Object = typeUntypedObject(param[i]); - param[i] = typedObj; - } - } - dispatchEvent(new ResultEvent(ResultEvent.RESULT,param)); - } - COMPILE::SWF - { - dispatchEvent(new ResultEvent(ResultEvent.RESULT,param.body)); - } + dispatchEvent(new ResultEvent(ResultEvent.RESULT, param.body)); } public function faultHandler(param:Object):void { - dispatchEvent(new FaultEvent(FaultEvent.FAULT,param)); - } - - COMPILE::JS - private function typeUntypedObject(unTypeObject:Object):Object - { - registerClassAlias(unTypeObject['_explicitType'],getClassByAlias(unTypeObject['_explicitType'])); - - var classToInstantiate:Class = getClassByAlias(unTypeObject['_explicitType']); - - var typedInstance:Object = new classToInstantiate(); - - for (var field:String in unTypeObject) - { - if (field == "_explicitType") continue; //Do nothing incase of "_explicitType" - - typedInstance[field] = unTypeObject[field]; - } - - return typedInstance; - } - - /** - * @private - * Special handler for legacy AMF packet level header "AppendToGatewayUrl". - * When we receive this header we assume the server detected that a session was - * created but it believed the client could not accept its session cookie, so we - * need to decorate the channel endpoint with the session id. - * - * We do not modify the underlying endpoint property, however, as this session - * is transient and should not apply if the channel is disconnected and re-connected - * at some point in the future. - */ - COMPILE::SWF - public function AppendToGatewayUrl(value:String):void - { - if (value != null && value != "") - { - nc.removeEventListener(NetStatusEvent.NET_STATUS, statusHandler); - trace("disconnecting because AppendToGatewayUrl called"); - nc.close(); - trace("disconnecting returned from close()"); - var url:String = endPoint; - // WSRP support - append any extra stuff on the wsrp-url, not the actual url. - - // Do we have a wsrp-url? - var i:int = url.indexOf("wsrp-url="); - if (i != -1) - { - // Extract the wsrp-url in to a string which will get the - // extra info appended to it - var temp:String = url.substr(i + 9, url.length); - var j:int = temp.indexOf("&"); - if (j != -1) - { - temp = temp.substr(0, j); - } - - // Replace the wsrp-url with a version that has the extra stuff - url = url.replace(temp, temp + value); - } - else - { - // If we didn't find a wsrp-url, just append the info - url += value; - } - nc.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); - trace("reconnecting with " + url); - nc.connect(url); - trace("reconnecting returned from connect()"); - } - } - + dispatchEvent(new FaultEvent(FaultEvent.FAULT, param)); + } } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/62408930/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as index 1110a46..989db30 100755 --- a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as +++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as @@ -18,18 +18,10 @@ //////////////////////////////////////////////////////////////////////////////// package org.apache.flex.net.remoting { - COMPILE::SWF - { - import flash.events.AsyncErrorEvent; - import flash.events.IOErrorEvent; - import flash.events.NetStatusEvent; - import flash.events.SecurityErrorEvent; - import flash.net.Responder; - } - - import org.apache.flex.events.EventDispatcher; import org.apache.flex.net.RemoteObject; + import org.apache.flex.net.Responder; + import org.apache.flex.net.remoting.messages.AcknowledgeMessage; import org.apache.flex.net.remoting.messages.CommandMessage; import org.apache.flex.net.remoting.messages.RemotingMessage; import org.apache.flex.net.events.FaultEvent; @@ -53,58 +45,25 @@ package org.apache.flex.net.remoting public function send():void { - COMPILE::SWF - { - _ro.nc.addEventListener(NetStatusEvent.NET_STATUS, statusHandler); - _ro.nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); - _ro.nc.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); - _ro.nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler); - var connectMessage:CommandMessage = new CommandMessage(); - connectMessage.destination = _ro.destination; - connectMessage.operation = CommandMessage.TRIGGER_CONNECT_OPERATION; - _ro.nc.call(null, new Responder(destinationResultHandler, destinationFaultHandler), connectMessage); - } - COMPILE::JS - { - var amfClient:Object = new ((window as Object).amf).Client(_destination, _endPoint); - var amfReq:Object = amfClient.invoke(_source, operation, params[0]); - amfReq.then(resultHandler , faultHandler); - } + var connectMessage:CommandMessage = new CommandMessage(); + connectMessage.destination = _ro.destination; + connectMessage.operation = CommandMessage.TRIGGER_CONNECT_OPERATION; + _ro.nc.call(null, new Responder(destinationResultHandler, destinationFaultHandler), connectMessage); } - COMPILE::SWF - private function statusHandler(event:NetStatusEvent):void - { - trace("statusHandler", event); - } - - COMPILE::SWF - private function securityErrorHandler(event:SecurityErrorEvent):void - { - trace("securityErrorHandler", event); - } - - COMPILE::SWF - private function ioErrorHandler(event:IOErrorEvent):void - { - trace("ioErrorHandler", event); - } - - COMPILE::SWF - private function asyncErrorHandler(event:AsyncErrorEvent):void - { - trace("asyncErrorHandler", event); - } - private function destinationResultHandler(param:Object):void { - var message:RemotingMessage = new RemotingMessage(); - message.operation = _name; - message.body = _args; - message.source = _ro.source; - message.destination = _ro.destination; - _ro.nc.call(null, new Responder(_ro.resultHandler, _ro.faultHandler), message); - + if (param is AcknowledgeMessage) // this force links AcknowledgeMessage so it deserializes correctly in JS + { + var message:RemotingMessage = new RemotingMessage(); + message.operation = _name; + message.body = _args; + message.source = _ro.source; + message.destination = _ro.destination; + _ro.nc.call(null, new Responder(_ro.resultHandler, _ro.faultHandler), message); + } + else + trace("destination result handler", param); } private function destinationFaultHandler(param:Object):void
