You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2017/08/23 03:20:35 UTC
[5/8] git commit: [flex-asjs] [refs/heads/feature/amf] - rudimentary
SWF implementation of AMF in FlexJS. Now I know what needs to be done on the
JS side
rudimentary SWF implementation of AMF in FlexJS. Now I know what needs to be done on the JS side
Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/029d87f1
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/029d87f1
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/029d87f1
Branch: refs/heads/feature/amf
Commit: 029d87f166d06796ea91953e1103bc4187f6408a
Parents: 98f992c
Author: Alex Harui <ah...@apache.org>
Authored: Tue Aug 22 18:13:59 2017 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Tue Aug 22 18:17:10 2017 -0700
----------------------------------------------------------------------
.../Network/src/main/flex/NetworkClasses.as | 5 +
.../flex/org/apache/flex/net/RemoteObject.as | 169 +++-
.../org/apache/flex/net/remoting/Operation.as | 116 +++
.../net/remoting/messages/AbstractMessage.as | 781 +++++++++++++++++++
.../net/remoting/messages/AcknowledgeMessage.as | 148 ++++
.../flex/net/remoting/messages/AsyncMessage.as | 272 +++++++
.../net/remoting/messages/CommandMessage.as | 581 ++++++++++++++
.../flex/net/remoting/messages/IMessage.as | 222 ++++++
.../net/remoting/messages/RemotingMessage.as | 95 +++
9 files changed, 2365 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/NetworkClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/NetworkClasses.as b/frameworks/projects/Network/src/main/flex/NetworkClasses.as
index aeb8e42..8dd2e36 100644
--- a/frameworks/projects/Network/src/main/flex/NetworkClasses.as
+++ b/frameworks/projects/Network/src/main/flex/NetworkClasses.as
@@ -30,6 +30,11 @@ package
import org.apache.flex.net.HTTPConstants; HTTPConstants;
import org.apache.flex.net.events.ResultEvent; ResultEvent;
import org.apache.flex.net.events.FaultEvent; FaultEvent;
+
+ import org.apache.flex.net.remoting.messages.AsyncMessage; AsyncMessage;
+ import org.apache.flex.net.remoting.messages.CommandMessage; CommandMessage;
+ import org.apache.flex.net.remoting.messages.RemotingMessage; RemotingMessage;
+ import org.apache.flex.net.remoting.messages.AcknowledgeMessage; AcknowledgeMessage;
}
}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/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 b57be6f..846731e 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,16 +18,30 @@
////////////////////////////////////////////////////////////////////////////////
package org.apache.flex.net
{
- import org.apache.flex.net.events.FaultEvent;
- import org.apache.flex.net.events.ResultEvent;
-
- import org.apache.flex.events.EventDispatcher;
- import org.apache.flex.reflection.getClassByAlias;
- import org.apache.flex.reflection.registerClassAlias;
+ 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;
+ import org.apache.flex.events.EventDispatcher;
+ 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.reflection.getClassByAlias;
+ import org.apache.flex.reflection.registerClassAlias;
[Event(name="result", type="org.apache.flex.net.events.ResultEvent")]
[Event(name="fault", type="org.apache.flex.net.events.FaultEvent")]
- public class RemoteObject extends EventDispatcher
+ public class RemoteObject extends EventDispatcher implements IBead
{
private var _endPoint:String;
private var _destination:String;
@@ -41,8 +55,24 @@ package org.apache.flex.net
*/
public function RemoteObject()
{
+ COMPILE::SWF
+ {
+ nc = new NetConnection();
+ nc.objectEncoding = ObjectEncoding.AMF3;
+ nc.client = this;
+ }
}
+ private var _strand:IStrand;
+
+ public function set strand(value:IStrand):void
+ {
+ _strand = value;
+ }
+
+ COMPILE::SWF
+ public var nc:NetConnection;
+
public function set endPoint(value:String):void
{
_endPoint = value;
@@ -70,8 +100,19 @@ package org.apache.flex.net
return _source;
}
- public function send(operation:String , params:Array):void
+ 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);
@@ -80,28 +121,56 @@ package org.apache.flex.net
}
}
- private function resultHandler(param:Object):void
+ 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
{
- 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::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.body));
}
- private function faultHandler(param:Object):void
+ 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']));
@@ -119,5 +188,57 @@ package org.apache.flex.net
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()");
+ }
+ }
+
}
-}
\ No newline at end of file
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/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
new file mode 100755
index 0000000..1110a46
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/Operation.as
@@ -0,0 +1,116 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+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.remoting.messages.CommandMessage;
+ import org.apache.flex.net.remoting.messages.RemotingMessage;
+ import org.apache.flex.net.events.FaultEvent;
+ import org.apache.flex.net.events.ResultEvent;
+ import org.apache.flex.reflection.getClassByAlias;
+ import org.apache.flex.reflection.registerClassAlias;
+
+
+ public class Operation extends EventDispatcher
+ {
+ private var _name:String;
+ private var _args:Array;
+ private var _ro:RemoteObject;
+
+ public function Operation(name:String, remoteObject:RemoteObject, args:Array)
+ {
+ _name = name;
+ _args = args;
+ _ro = remoteObject;
+ }
+
+ 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);
+ }
+ }
+
+ 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);
+
+ }
+
+ private function destinationFaultHandler(param:Object):void
+ {
+ trace("destination fault handler", param);
+ }
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AbstractMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AbstractMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AbstractMessage.as
new file mode 100644
index 0000000..9b913a2
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AbstractMessage.as
@@ -0,0 +1,781 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+COMPILE::SWF
+{
+ import flash.utils.ByteArray;
+ import flash.utils.IDataInput;
+ import flash.utils.IDataOutput;
+ import flash.utils.getQualifiedClassName;
+}
+
+import org.apache.flex.utils.ObjectUtil;
+import org.apache.flex.utils.UIDUtil;
+
+/*
+import mx.core.mx_internal;
+import mx.utils.RPCObjectUtil;
+import mx.utils.RPCStringUtil;
+import mx.utils.RPCUIDUtil;
+
+use namespace mx_internal;
+*/
+
+/**
+ * Abstract base class for all messages.
+ * Messages have two customizable sections; headers and body.
+ * The <code>headers</code> property provides access to specialized meta
+ * information for a specific message instance.
+ * The <code>headers</code> property is an associative array with the specific
+ * header name as the key.
+ * <p>
+ * The body of a message contains the instance specific data that needs to be
+ * delivered and processed by the remote destination.
+ * The <code>body</code> is an object and is the payload for a message.
+ * </p>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public class AbstractMessage implements IMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Static Constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Messages pushed from the server may arrive in a batch, with messages in the
+ * batch potentially targeted to different Consumer instances.
+ * Each message will contain this header identifying the Consumer instance that
+ * will receive the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const DESTINATION_CLIENT_ID_HEADER:String = "DSDstClientId";
+
+ /**
+ * Messages are tagged with the endpoint id for the Channel they are sent over.
+ * Channels set this value automatically when they send a message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const ENDPOINT_HEADER:String = "DSEndpoint";
+
+ /**
+ * This header is used to transport the global FlexClient Id value in outbound
+ * messages once it has been assigned by the server.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const FLEX_CLIENT_ID_HEADER:String = "DSId";
+
+ /**
+ * Messages sent by a MessageAgent can have a priority header with a 0-9
+ * numerical value (0 being lowest) and the server can choose to use this
+ * numerical value to prioritize messages to clients.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const PRIORITY_HEADER:String = "DSPriority";
+
+ /**
+ * Messages that need to set remote credentials for a destination
+ * carry the Base64 encoded credentials in this header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const REMOTE_CREDENTIALS_HEADER:String = "DSRemoteCredentials";
+
+ /**
+ * Messages that need to set remote credentials for a destination
+ * may also need to report the character-set encoding that was used to
+ * create the credentials String using this header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const REMOTE_CREDENTIALS_CHARSET_HEADER:String = "DSRemoteCredentialsCharset";
+
+ /**
+ * Messages sent with a defined request timeout use this header.
+ * The request timeout value is set on outbound messages by services or
+ * channels and the value controls how long the corresponding MessageResponder
+ * will wait for an acknowledgement, result or fault response for the message
+ * before timing out the request.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const REQUEST_TIMEOUT_HEADER:String = "DSRequestTimeout";
+
+ /**
+ * A status code can provide context about the nature of a response
+ * message. For example, messages received from an HTTP based channel may
+ * need to report the HTTP response status code (if available).
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const STATUS_CODE_HEADER:String = "DSStatusCode";
+
+
+ //--------------------------------------------------------------------------
+ //
+ // Private Static Constants for Serialization
+ //
+ //--------------------------------------------------------------------------
+
+ /*
+ private static const HAS_NEXT_FLAG:uint = 128;
+ private static const BODY_FLAG:uint = 1;
+ private static const CLIENT_ID_FLAG:uint = 2;
+ private static const DESTINATION_FLAG:uint = 4;
+ private static const HEADERS_FLAG:uint = 8;
+ private static const MESSAGE_ID_FLAG:uint = 16;
+ private static const TIMESTAMP_FLAG:uint = 32;
+ private static const TIME_TO_LIVE_FLAG:uint = 64;
+ private static const CLIENT_ID_BYTES_FLAG:uint = 1;
+ private static const MESSAGE_ID_BYTES_FLAG:uint = 2;
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructs an instance of an AbstractMessage with an empty body and header.
+ * This message type should not be instantiated or used directly.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function AbstractMessage()
+ {
+ super();
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // body
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _body:Object = {};
+
+ /**
+ * The body of a message contains the specific data that needs to be
+ * delivered to the remote destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get body():Object
+ {
+ return _body;
+ }
+
+ /**
+ * @private
+ */
+ public function set body(value:Object):void
+ {
+ _body = value;
+ }
+
+ //----------------------------------
+ // clientId
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _clientId:String;
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ private var clientIdBytes:ByteArray;
+
+ /**
+ * The clientId indicates which MessageAgent sent the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get clientId():String
+ {
+ return _clientId;
+ }
+
+ /**
+ * @private
+ */
+ public function set clientId(value:String):void
+ {
+ _clientId = value;
+ COMPILE::SWF
+ {
+ clientIdBytes = null;
+ }
+ }
+
+ //----------------------------------
+ // destination
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _destination:String = "";
+
+ /**
+ * The message destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get destination():String
+ {
+ return _destination;
+ }
+
+ /**
+ * @private
+ */
+ public function set destination(value:String):void
+ {
+ _destination = value;
+ }
+
+ //----------------------------------
+ // headers
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _headers:Object;
+
+ /**
+ * The headers of a message are an associative array where the key is the
+ * header name and the value is the header value.
+ * This property provides access to the specialized meta information for the
+ * specific message instance.
+ * Core header names begin with a 'DS' prefix. Custom header names should start
+ * with a unique prefix to avoid name collisions.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get headers():Object
+ {
+ if (_headers == null)
+ _headers = {};
+
+ return _headers;
+ }
+
+ /**
+ * @private
+ */
+ public function set headers(value:Object):void
+ {
+ _headers = value;
+ }
+
+ //----------------------------------
+ // messageId
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _messageId:String;
+
+ /**
+ * @private
+ */
+ COMPILE::SWF
+ private var messageIdBytes:ByteArray;
+
+ /**
+ * The unique id for the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get messageId():String
+ {
+ if (_messageId == null)
+ _messageId = UIDUtil.createUID();
+
+ return _messageId;
+ }
+
+ /**
+ * @private
+ */
+ public function set messageId(value:String):void
+ {
+ _messageId = value;
+ COMPILE::SWF
+ {
+ messageIdBytes = null;
+ }
+ }
+
+ //----------------------------------
+ // timestamp
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _timestamp:Number = 0;
+
+ /**
+ * Provides access to the time stamp for the message.
+ * A time stamp is the date and time that the message was sent.
+ * The time stamp is used for tracking the message through the system,
+ * ensuring quality of service levels and providing a mechanism for
+ * message expiration.
+ *
+ * @see #timeToLive
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get timestamp():Number
+ {
+ return _timestamp;
+ }
+
+ /**
+ * @private
+ */
+ public function set timestamp(value:Number):void
+ {
+ _timestamp = value;
+ }
+
+ //----------------------------------
+ // timeToLive
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ private var _timeToLive:Number = 0;
+
+ /**
+ * The time to live value of a message indicates how long the message
+ * should be considered valid and deliverable.
+ * This value works in conjunction with the <code>timestamp</code> value.
+ * Time to live is the number of milliseconds that this message remains
+ * valid starting from the specified <code>timestamp</code> value.
+ * For example, if the <code>timestamp</code> value is 04/05/05 1:30:45 PST
+ * and the <code>timeToLive</code> value is 5000, then this message will
+ * expire at 04/05/05 1:30:50 PST.
+ * Once a message expires it will not be delivered to any other clients.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function get timeToLive():Number
+ {
+ return _timeToLive;
+ }
+
+ /**
+ * @private
+ */
+ public function set timeToLive(value:Number):void
+ {
+ _timeToLive = value;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ *
+ * While this class itself does not implement flash.utils.IExternalizable,
+ * ISmallMessage implementations will typically use IExternalizable to
+ * serialize themselves in a smaller form. This method supports this
+ * functionality by implementing IExternalizable.readExternal(IDataInput) to
+ * deserialize the properties for this abstract base class.
+ */
+ /* LATER
+ public function readExternal(input:IDataInput):void
+ {
+ var flagsArray:Array = readFlags(input);
+
+ for (var i:uint = 0; i < flagsArray.length; i++)
+ {
+ var flags:uint = flagsArray[i] as uint;
+ var reservedPosition:uint = 0;
+
+ if (i == 0)
+ {
+ if ((flags & BODY_FLAG) != 0)
+ readExternalBody(input);
+ else
+ body = null; // default body is {} so need to set it here
+
+ if ((flags & CLIENT_ID_FLAG) != 0)
+ clientId = input.readObject();
+
+ if ((flags & DESTINATION_FLAG) != 0)
+ destination = input.readObject() as String;
+
+ if ((flags & HEADERS_FLAG) != 0)
+ headers = input.readObject();
+
+ if ((flags & MESSAGE_ID_FLAG) != 0)
+ messageId = input.readObject() as String;
+
+ if ((flags & TIMESTAMP_FLAG) != 0)
+ timestamp = input.readObject() as Number;
+
+ if ((flags & TIME_TO_LIVE_FLAG) != 0)
+ timeToLive = input.readObject() as Number;
+
+ reservedPosition = 7;
+ }
+ else if (i == 1)
+ {
+ if ((flags & CLIENT_ID_BYTES_FLAG) != 0)
+ {
+ clientIdBytes = input.readObject() as ByteArray;
+ clientId = RPCUIDUtil.fromByteArray(clientIdBytes);
+ }
+
+ if ((flags & MESSAGE_ID_BYTES_FLAG) != 0)
+ {
+ messageIdBytes = input.readObject() as ByteArray;
+ messageId = RPCUIDUtil.fromByteArray(messageIdBytes);
+ }
+
+ reservedPosition = 2;
+ }
+
+ // For forwards compatibility, read in any other flagged objects to
+ // preserve the integrity of the input stream...
+ if ((flags >> reservedPosition) != 0)
+ {
+ for (var j:uint = reservedPosition; j < 6; j++)
+ {
+ if (((flags >> j) & 1) != 0)
+ {
+ input.readObject();
+ }
+ }
+ }
+ }
+ }
+ */
+
+ /**
+ * Returns a string representation of the message.
+ *
+ * @return String representation of the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function toString():String
+ {
+ return ObjectUtil._toString(this);
+ }
+
+ /**
+ * @private
+ *
+ * While this class itself does not implement flash.utils.IExternalizable,
+ * ISmallMessage implementations will typically use IExternalizable to
+ * serialize themselves in a smaller form. This method supports this
+ * functionality by implementing IExternalizable.writeExternal(IDataOutput)
+ * to efficiently serialize the properties for this abstract base class.
+ */
+ /*
+ public function writeExternal(output:IDataOutput):void
+ {
+ var flags:uint = 0;
+
+ // Since we're using custom serialization, we have to invoke the
+ // messageId getter to ensure we have a valid id for the message.
+ var checkForMessageId:String = messageId;
+
+ if (clientIdBytes == null)
+ clientIdBytes = RPCUIDUtil.toByteArray(_clientId);
+
+ if (messageIdBytes == null)
+ messageIdBytes = RPCUIDUtil.toByteArray(_messageId);
+
+ if (body != null)
+ flags |= BODY_FLAG;
+
+ if (clientId != null && clientIdBytes == null)
+ flags |= CLIENT_ID_FLAG;
+
+ if (destination != null)
+ flags |= DESTINATION_FLAG;
+
+ if (headers != null)
+ flags |= HEADERS_FLAG;
+
+ if (messageId != null && messageIdBytes == null)
+ flags |= MESSAGE_ID_FLAG;
+
+ if (timestamp != 0)
+ flags |= TIMESTAMP_FLAG;
+
+ if (timeToLive != 0)
+ flags |= TIME_TO_LIVE_FLAG;
+
+ if (clientIdBytes != null || messageIdBytes != null)
+ flags |= HAS_NEXT_FLAG;
+
+ output.writeByte(flags);
+
+ flags = 0;
+
+ if (clientIdBytes != null)
+ flags |= CLIENT_ID_BYTES_FLAG;
+
+ if (messageIdBytes != null)
+ flags |= MESSAGE_ID_BYTES_FLAG;
+
+ // This is only read if the previous flag has HAS_NEXT_FLAG set
+ if (flags != 0)
+ output.writeByte(flags);
+
+ if (body != null)
+ writeExternalBody(output);
+
+ if (clientId != null && clientIdBytes == null)
+ output.writeObject(clientId);
+
+ if (destination != null)
+ output.writeObject(destination);
+
+ if (headers != null)
+ output.writeObject(headers);
+
+ if (messageId != null && messageIdBytes == null)
+ output.writeObject(messageId);
+
+ if (timestamp != 0)
+ output.writeObject(timestamp);
+
+ if (timeToLive != 0)
+ output.writeObject(timeToLive);
+
+ if (clientIdBytes != null)
+ output.writeObject(clientIdBytes);
+
+ if (messageIdBytes != null)
+ output.writeObject(messageIdBytes);
+ }
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Protected Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ /*
+ protected function addDebugAttributes(attributes:Object):void
+ {
+ attributes["body"] = body;
+ attributes["clientId"] = clientId;
+ attributes["destination"] = destination;
+ attributes["headers"] = headers;
+ attributes["messageId"] = messageId;
+ attributes["timestamp"] = timestamp;
+ attributes["timeToLive"] = timeToLive;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ final protected function getDebugString():String
+ {
+ var result:String = "(" + getQualifiedClassName(this) + ")";
+
+ var attributes:Object = {};
+ addDebugAttributes(attributes);
+
+ var propertyNames:Array = [];
+ for (var propertyName:String in attributes)
+ {
+ propertyNames.push(propertyName);
+ }
+ propertyNames.sort();
+
+ var length:int = propertyNames.length;
+ for (var i:uint = 0; i < length; i++)
+ {
+ var name:String = String(propertyNames[i]);
+ var value:String = RPCObjectUtil.toString(attributes[name]);
+ result += RPCStringUtil.substitute("\n {0}={1}", name, value);
+ }
+
+ return result;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ protected function readExternalBody(input:IDataInput):void
+ {
+ body = input.readObject();
+ }
+ */
+
+ /**
+ * @private
+ * To support efficient serialization for ISmallMessage implementations,
+ * this utility method reads in the property flags from an IDataInput
+ * stream. Flags are read in one byte at a time. Flags make use of
+ * sign-extension so that if the high-bit is set to 1 this indicates that
+ * another set of flags follows.
+ *
+ * @return The Array of property flags. Each flags byte is stored as a uint
+ * in the Array.
+ */
+ /*
+ protected function readFlags(input:IDataInput):Array
+ {
+ var hasNextFlag:Boolean = true;
+ var flagsArray:Array = [];
+
+ while (hasNextFlag && input.bytesAvailable > 0)
+ {
+ var flags:uint = input.readUnsignedByte();
+ flagsArray.push(flags);
+
+ if ((flags & HAS_NEXT_FLAG) != 0)
+ hasNextFlag = true;
+ else
+ hasNextFlag = false;
+ }
+
+ return flagsArray;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ protected function writeExternalBody(output:IDataOutput):void
+ {
+ output.writeObject(body);
+ }
+ */
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AcknowledgeMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AcknowledgeMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AcknowledgeMessage.as
new file mode 100644
index 0000000..99261fa
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AcknowledgeMessage.as
@@ -0,0 +1,148 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+COMPILE::SWF
+{
+import flash.utils.IDataInput;
+import flash.utils.IDataOutput;
+}
+
+[RemoteClass(alias="flex.messaging.messages.AcknowledgeMessage")]
+
+/**
+ * An AcknowledgeMessage acknowledges the receipt of a message that
+ * was sent previously.
+ * Every message sent within the messaging system must receive an
+ * acknowledgement.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public class AcknowledgeMessage extends AsyncMessage // implements ISmallMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Static Constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Header name for the error hint header.
+ * Used to indicate that the acknowledgement is for a message that
+ * generated an error.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const ERROR_HINT_HEADER:String = "DSErrorHint";
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructs an instance of an AcknowledgeMessage with an empty body and header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function AcknowledgeMessage()
+ {
+ super();
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ /*
+ override public function getSmallMessage():IMessage
+ {
+ var o:Object = this;
+ if (o.constructor == AcknowledgeMessage)
+ return new AcknowledgeMessageExt(this);
+ return null;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function readExternal(input:IDataInput):void
+ {
+ super.readExternal(input);
+
+ var flagsArray:Array = readFlags(input);
+ for (var i:uint = 0; i < flagsArray.length; i++)
+ {
+ var flags:uint = flagsArray[i] as uint;
+ var reservedPosition:uint = 0;
+
+ // For forwards compatibility, read in any other flagged objects
+ // to preserve the integrity of the input stream...
+ if ((flags >> reservedPosition) != 0)
+ {
+ for (var j:uint = reservedPosition; j < 6; j++)
+ {
+ if (((flags >> j) & 1) != 0)
+ {
+ input.readObject();
+ }
+ }
+ }
+ }
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function writeExternal(output:IDataOutput):void
+ {
+ super.writeExternal(output);
+
+ var flags:uint = 0;
+ output.writeByte(flags);
+ }
+ */
+
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AsyncMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AsyncMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AsyncMessage.as
new file mode 100644
index 0000000..0aeb5a1
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/AsyncMessage.as
@@ -0,0 +1,272 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+COMPILE::SWF
+{
+import flash.utils.ByteArray;
+import flash.utils.IDataInput;
+import flash.utils.IDataOutput;
+}
+
+[RemoteClass(alias="flex.messaging.messages.AsyncMessage")]
+
+/**
+ * AsyncMessage is the base class for all asynchronous messages.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public class AsyncMessage extends AbstractMessage // implements ISmallMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Static Constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Messages sent by a MessageAgent with a defined <code>subtopic</code>
+ * property indicate their target subtopic in this header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const SUBTOPIC_HEADER:String = "DSSubtopic";
+
+ //--------------------------------------------------------------------------
+ //
+ // Private Static Constants for Serialization
+ //
+ //--------------------------------------------------------------------------
+
+ /*
+ private static const CORRELATION_ID_FLAG:uint = 1;
+ private static const CORRELATION_ID_BYTES_FLAG:uint = 2;
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructs an instance of an AsyncMessage with an empty body and header.
+ * In addition to this default behavior, the body and the headers for the
+ * message may also be passed to the constructor as a convenience.
+ * An example of this invocation approach for the body is:
+ * <code>var msg:AsyncMessage = new AsyncMessage("Body text");</code>
+ * An example that provides both the body and headers is:
+ * <code>var msg:AsyncMessage = new AsyncMessage("Body text", {"customerHeader":"customValue"});</code>
+ *
+ * @param body The optional body to assign to the message.
+ *
+ * @param headers The optional headers to assign to the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function AsyncMessage(body:Object = null, headers:Object = null)
+ {
+ super();
+
+ //correlationId = "";
+ if (body != null)
+ this.body = body;
+
+ if (headers != null)
+ this.headers = headers;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // correlationId
+ //----------------------------------
+
+ /**
+ * @private
+ */
+ /*
+ private var _correlationId:String;
+ */
+
+ /**
+ * @private
+ */
+ /*
+ private var correlationIdBytes:ByteArray;
+ */
+
+ /**
+ * Provides access to the correlation id of the message.
+ * Used for acknowledgement and for segmentation of messages.
+ * The <code>correlationId</code> contains the <code>messageId</code> of the
+ * previous message that this message refers to.
+ *
+ * @see mx.messaging.messages.AbstractMessage#messageId
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ /*
+ public function get correlationId():String
+ {
+ return _correlationId;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ public function set correlationId(value:String):void
+ {
+ _correlationId = value;
+ correlationIdBytes = null;
+ }
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ /*
+ public function getSmallMessage():IMessage
+ {
+ // If it is a subclass, it will need to override this itself if it wants to use
+ // small messages.
+ var o:Object = this;
+ if (o.constructor == AsyncMessage)
+ return new AsyncMessageExt(this);
+ return null;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function readExternal(input:IDataInput):void
+ {
+ super.readExternal(input);
+
+ var flagsArray:Array = readFlags(input);
+ for (var i:uint = 0; i < flagsArray.length; i++)
+ {
+ var flags:uint = flagsArray[i] as uint;
+ var reservedPosition:uint = 0;
+
+ if (i == 0)
+ {
+ if ((flags & CORRELATION_ID_FLAG) != 0)
+ correlationId = input.readObject() as String;
+
+ if ((flags & CORRELATION_ID_BYTES_FLAG) != 0)
+ {
+ correlationIdBytes = input.readObject() as ByteArray;
+ correlationId = RPCUIDUtil.fromByteArray(correlationIdBytes);
+ }
+
+ reservedPosition = 2;
+ }
+
+ // For forwards compatibility, read in any other flagged objects
+ // to preserve the integrity of the input stream...
+ if ((flags >> reservedPosition) != 0)
+ {
+ for (var j:uint = reservedPosition; j < 6; j++)
+ {
+ if (((flags >> j) & 1) != 0)
+ {
+ input.readObject();
+ }
+ }
+ }
+ }
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function writeExternal(output:IDataOutput):void
+ {
+ super.writeExternal(output);
+
+ if (correlationIdBytes == null)
+ correlationIdBytes = RPCUIDUtil.toByteArray(_correlationId);
+
+ var flags:uint = 0;
+
+ if (correlationId != null && correlationIdBytes == null)
+ flags |= CORRELATION_ID_FLAG;
+
+ if (correlationIdBytes != null)
+ flags |= CORRELATION_ID_BYTES_FLAG;
+
+ output.writeByte(flags);
+
+ if (correlationId != null && correlationIdBytes == null)
+ output.writeObject(correlationId);
+
+ if (correlationIdBytes != null)
+ output.writeObject(correlationIdBytes);
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override protected function addDebugAttributes(attributes:Object):void
+ {
+ super.addDebugAttributes(attributes);
+ attributes["correlationId"] = correlationId;
+ }
+ */
+
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/CommandMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/CommandMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/CommandMessage.as
new file mode 100644
index 0000000..dcd0f85
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/CommandMessage.as
@@ -0,0 +1,581 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+COMPILE::SWF
+{
+import flash.utils.IDataInput;
+import flash.utils.IDataOutput;
+}
+
+[RemoteClass(alias="flex.messaging.messages.CommandMessage")]
+
+/**
+ * The CommandMessage class provides a mechanism for sending commands to the
+ * server infrastructure, such as commands related to publish/subscribe
+ * messaging scenarios, ping operations, and cluster operations.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public class CommandMessage extends AsyncMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Static Constants
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * This operation is used to subscribe to a remote destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const SUBSCRIBE_OPERATION:uint = 0;
+
+ /**
+ * This operation is used to unsubscribe from a remote destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const UNSUBSCRIBE_OPERATION:uint = 1;
+
+ /**
+ * This operation is used to poll a remote destination for pending,
+ * undelivered messages.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const POLL_OPERATION:uint = 2;
+
+ /**
+ * This operation is used by a remote destination to sync missed or cached messages
+ * back to a client as a result of a client issued poll command.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const CLIENT_SYNC_OPERATION:uint = 4;
+
+ /**
+ * This operation is used to test connectivity over the current channel to
+ * the remote endpoint.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const CLIENT_PING_OPERATION:uint = 5;
+
+ /**
+ * This operation is used to request a list of failover endpoint URIs
+ * for the remote destination based on cluster membership.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const CLUSTER_REQUEST_OPERATION:uint = 7;
+
+ /**
+ * This operation is used to send credentials to the endpoint so that
+ * the user can be logged in over the current channel.
+ * The credentials need to be Base64 encoded and stored in the <code>body</code>
+ * of the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const LOGIN_OPERATION:uint = 8;
+
+ /**
+ * This operation is used to log the user out of the current channel, and
+ * will invalidate the server session if the channel is HTTP based.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const LOGOUT_OPERATION:uint = 9;
+
+ /**
+ * Endpoints can imply what features they support by reporting the
+ * latest version of messaging they are capable of during the handshake of
+ * the initial ping CommandMessage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const MESSAGING_VERSION:String = "DSMessagingVersion";
+
+ /**
+ * This operation is used to indicate that the client's subscription with a
+ * remote destination has timed out.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const SUBSCRIPTION_INVALIDATE_OPERATION:uint = 10;
+
+ /**
+ * Used by the MultiTopicConsumer to subscribe/unsubscribe for more
+ * than one topic in the same message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const MULTI_SUBSCRIBE_OPERATION:uint = 11;
+
+ /**
+ * This operation is used to indicate that a channel has disconnected.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const DISCONNECT_OPERATION:uint = 12;
+
+ /**
+ * This operation is used to trigger a ChannelSet to connect.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const TRIGGER_CONNECT_OPERATION:uint = 13;
+
+ /**
+ * This is the default operation for new CommandMessage instances.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const UNKNOWN_OPERATION:uint = 10000;
+
+ /**
+ * The server message type for authentication commands.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const AUTHENTICATION_MESSAGE_REF_TYPE:String = "flex.messaging.messages.AuthenticationMessage";
+
+ /**
+ * Subscribe commands issued by a Consumer pass the Consumer's <code>selector</code>
+ * expression in this header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const SELECTOR_HEADER:String = "DSSelector";
+
+ /**
+ * Durable JMS subscriptions are preserved when an unsubscribe message
+ * has this parameter set to true in its header.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const PRESERVE_DURABLE_HEADER:String = "DSPreserveDurable";
+
+ /**
+ * Header to indicate that the Channel needs the configuration from the
+ * server.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const NEEDS_CONFIG_HEADER:String = "DSNeedsConfig";
+
+ /**
+ * Header used in a MULTI_SUBSCRIBE message to specify an Array of subtopic/selector
+ * pairs to add to the existing set of subscriptions.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const ADD_SUBSCRIPTIONS:String = "DSAddSub";
+
+ /**
+ * Like the above, but specifies the subtopic/selector array of to remove
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const REMOVE_SUBSCRIPTIONS:String = "DSRemSub";
+
+ /**
+ * The separator string used for separating subtopic and selectors in the
+ * add and remove subscription headers.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const SUBTOPIC_SEPARATOR:String = "_;_";
+
+ /**
+ * Header to drive an idle wait time before the next client poll request.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const POLL_WAIT_HEADER:String = "DSPollWait";
+
+ /**
+ * Header to suppress poll response processing. If a client has a long-poll
+ * parked on the server and issues another poll, the response to this subsequent poll
+ * should be tagged with this header in which case the response is treated as a
+ * no-op and the next poll will not be scheduled. Without this, a subsequent poll
+ * will put the channel and endpoint into a busy polling cycle.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const NO_OP_POLL_HEADER:String = "DSNoOpPoll";
+
+ /**
+ * Header to specify which character set encoding was used while encoding
+ * login credentials.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const CREDENTIALS_CHARSET_HEADER:String = "DSCredentialsCharset";
+
+ /**
+ * Header to indicate the maximum number of messages a Consumer wants to
+ * receive per second.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public static const MAX_FREQUENCY_HEADER:String = "DSMaxFrequency";
+
+ /**
+ * Header that indicates the message is a heartbeat.
+ */
+ public static const HEARTBEAT_HEADER:String = "DS<3";
+
+ //--------------------------------------------------------------------------
+ //
+ // Private Static Constants for Serialization
+ //
+ //--------------------------------------------------------------------------
+
+ private static const OPERATION_FLAG:uint = 1;
+
+ //--------------------------------------------------------------------------
+ //
+ // Static Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ * Map of operations to semi-descriptive operation text strings.
+ */
+ private static var operationTexts:Object = null;
+
+
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructs an instance of a CommandMessage with an empty body and header
+ * and a default <code>operation</code> of <code>UNKNOWN_OPERATION</code>.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function CommandMessage()
+ {
+ super();
+ operation = UNKNOWN_OPERATION;
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Provides access to the operation/command for the CommandMessage.
+ * Operations indicate how this message should be processed by the remote
+ * destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public var operation:uint;
+
+ //--------------------------------------------------------------------------
+ //
+ // Overridden Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ /*
+ override public function getSmallMessage():IMessage
+ {
+ // We shouldn't use small messages for PING or LOGIN operations as the
+ // messaging version handshake would not yet be complete... for now just
+ // optimize POLL operations.
+ if (operation == POLL_OPERATION)
+ {
+ return new CommandMessageExt(this);
+ }
+
+ return null;
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override protected function addDebugAttributes(attributes:Object):void
+ {
+ super.addDebugAttributes(attributes);
+ attributes["operation"] = getOperationAsString(operation);
+ }
+ */
+
+ /**
+ * Returns a string representation of the message.
+ *
+ * @return String representation of the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ /*
+ override public function toString():String
+ {
+ return getDebugString();
+ }
+ */
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Provides a description of the operation specified.
+ * This method is used in <code>toString()</code> operations on this
+ * message.
+ *
+ * @param op One of the CommandMessage operation constants.
+ *
+ * @return Short name for the operation.
+ *
+ * @example
+ * <code><pre>
+ * var msg:CommandMessage = CommandMessage(event.message);
+ * trace("Current operation -'"+
+ * CommandMessage.getOperationAsString(msg.operation)+ "'.");
+ * </pre></code>
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ /*
+ public static function getOperationAsString(op:uint):String
+ {
+ if (operationTexts == null)
+ {
+ operationTexts = {};
+ operationTexts[SUBSCRIBE_OPERATION] = "subscribe";
+ operationTexts[UNSUBSCRIBE_OPERATION] = "unsubscribe";
+ operationTexts[POLL_OPERATION] = "poll";
+ operationTexts[CLIENT_SYNC_OPERATION] = "client sync";
+ operationTexts[CLIENT_PING_OPERATION] = "client ping";
+ operationTexts[CLUSTER_REQUEST_OPERATION] = "cluster request";
+ operationTexts[LOGIN_OPERATION] = "login";
+ operationTexts[LOGOUT_OPERATION] = "logout";
+ operationTexts[SUBSCRIPTION_INVALIDATE_OPERATION] = "subscription invalidate";
+ operationTexts[MULTI_SUBSCRIBE_OPERATION] = "multi-subscribe";
+ operationTexts[DISCONNECT_OPERATION] = "disconnect";
+ operationTexts[TRIGGER_CONNECT_OPERATION] = "trigger connect";
+ operationTexts[UNKNOWN_OPERATION] = "unknown";
+ }
+ var result:* = operationTexts[op];
+ return result == undefined ? op.toString() : String(result);
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function readExternal(input:IDataInput):void
+ {
+ super.readExternal(input);
+
+ var flagsArray:Array = readFlags(input);
+ for (var i:uint = 0; i < flagsArray.length; i++)
+ {
+ var flags:uint = flagsArray[i] as uint;
+ var reservedPosition:uint = 0;
+
+ if (i == 0)
+ {
+ if ((flags & OPERATION_FLAG) != 0)
+ operation = input.readObject() as uint;
+
+ reservedPosition = 1;
+ }
+
+ // For forwards compatibility, read in any other flagged objects
+ // to preserve the integrity of the input stream...
+ if ((flags >> reservedPosition) != 0)
+ {
+ for (var j:uint = reservedPosition; j < 6; j++)
+ {
+ if (((flags >> j) & 1) != 0)
+ {
+ input.readObject();
+ }
+ }
+ }
+ }
+ }
+ */
+
+ /**
+ * @private
+ */
+ /*
+ override public function writeExternal(output:IDataOutput):void
+ {
+ super.writeExternal(output);
+
+ var flags:uint = 0;
+
+ if (operation != 0)
+ flags |= OPERATION_FLAG;
+
+ output.writeByte(flags);
+
+ if (operation != 0)
+ output.writeObject(operation);
+ }
+ */
+
+}
+
+}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/IMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/IMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/IMessage.as
new file mode 100644
index 0000000..0d7b5f3
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/IMessage.as
@@ -0,0 +1,222 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+/**
+ * This interface defines the contract for message objects.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public interface IMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Properties
+ //
+ //--------------------------------------------------------------------------
+
+ //----------------------------------
+ // body
+ //----------------------------------
+
+ /**
+ * The body of a message contains the specific data that needs to be
+ * delivered to the remote destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get body():Object;
+
+ /**
+ * @private
+ */
+ function set body(value:Object):void;
+
+ //----------------------------------
+ // clientId
+ //----------------------------------
+
+ /**
+ * The clientId indicates which client sent the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get clientId():String;
+
+ /**
+ * @private
+ */
+ function set clientId(value:String):void;
+
+ //----------------------------------
+ // destination
+ //----------------------------------
+
+ /**
+ * The message destination.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get destination():String;
+
+ /**
+ * @private
+ */
+ function set destination(value:String):void;
+
+ //----------------------------------
+ // headers
+ //----------------------------------
+
+ /**
+ * Provides access to the headers of the message.
+ * The headers of a message are an associative array where the key is the
+ * header name.
+ * This property provides access to specialized meta information for the
+ * specific message instance.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get headers():Object;
+
+ /**
+ * @private
+ */
+ function set headers(value:Object):void;
+
+ //----------------------------------
+ // messageId
+ //----------------------------------
+
+ /**
+ * The unique id for the message.
+ * The message id can be used to correlate a response to the original
+ * request message in request-response messaging scenarios.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get messageId():String;
+
+ /**
+ * @private
+ */
+ function set messageId(value:String):void;
+
+ //----------------------------------
+ // timestamp
+ //----------------------------------
+
+ /**
+ * Provides access to the time stamp for the message.
+ * A time stamp is the date and time that the message was sent.
+ * The time stamp is used for tracking the message through the system,
+ * ensuring quality of service levels and providing a mechanism for
+ * expiration.
+ *
+ * @see #timeToLive
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get timestamp():Number;
+
+ /**
+ * @private
+ */
+ function set timestamp(value:Number):void;
+
+ //----------------------------------
+ // timeToLive
+ //----------------------------------
+
+ /**
+ * The time to live value of a message indicates how long the message
+ * should be considered valid and deliverable.
+ * This value works in conjunction with the <code>timestamp</code> value.
+ * Time to live is the number of milliseconds that this message remains
+ * valid starting from the specified <code>timestamp</code> value.
+ * For example, if the <code>timestamp</code> value is 04/05/05 1:30:45 PST
+ * and the <code>timeToLive</code> value is 5000, then this message will
+ * expire at 04/05/05 1:30:50 PST.
+ * Once a message expires it will not be delivered to any other clients.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function get timeToLive():Number;
+
+ /**
+ * @private
+ */
+ function set timeToLive(value:Number):void;
+
+ //--------------------------------------------------------------------------
+ //
+ // Methods
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * This method will return a string representation of the message.
+ *
+ * @return String representation of the message.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ function toString():String;
+
+}
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/029d87f1/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/RemotingMessage.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/RemotingMessage.as b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/RemotingMessage.as
new file mode 100644
index 0000000..93d3a7d
--- /dev/null
+++ b/frameworks/projects/Network/src/main/flex/org/apache/flex/net/remoting/messages/RemotingMessage.as
@@ -0,0 +1,95 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package org.apache.flex.net.remoting.messages
+{
+
+[RemoteClass(alias="flex.messaging.messages.RemotingMessage")]
+
+/**
+ * RemotingMessages are used to send RPC requests to a remote endpoint.
+ * These messages use the <code>operation</code> property to specify which
+ * method to call on the remote object.
+ * The <code>destination</code> property indicates what object/service should be
+ * used.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+public class RemotingMessage extends AbstractMessage
+{
+ //--------------------------------------------------------------------------
+ //
+ // Constructor
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Constructs an uninitialized RemotingMessage.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public function RemotingMessage()
+ {
+ super();
+ operation = "";
+ }
+
+ //--------------------------------------------------------------------------
+ //
+ // Variables
+ //
+ //--------------------------------------------------------------------------
+
+ /**
+ * Provides access to the name of the remote method/operation that
+ * should be called.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public var operation:String;
+
+ /**
+ * This property is provided for backwards compatibility. The best
+ * practice, however, is to not expose the underlying source of a
+ * RemoteObject destination on the client and only one source to
+ * a destination. Some types of Remoting Services may even ignore
+ * this property for security reasons.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 9
+ * @playerversion AIR 1.1
+ * @productversion BlazeDS 4
+ * @productversion LCDS 3
+ */
+ public var source:String;
+}
+
+}