| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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 mx.messaging.channels.amfx |
| { |
| |
| import mx.logging.ILogger; |
| |
| [ExcludeClass] |
| |
| /** |
| * Holds a list of complex object references, object trait info references, |
| * or string references generated while encoding or decoding and AMFX packet. |
| * Note that a new set of reference tables should be used per AMFX packet. |
| * Calling reset() will create new tables for each of these types of references. |
| * @private |
| */ |
| public class AMFXContext |
| { |
| /** |
| * Constructor. |
| * Initializes object, trait info and string reference tables. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function AMFXContext() |
| { |
| super(); |
| reset(); |
| } |
| |
| /** |
| * Resets the trait info, object and string reference tables. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function reset():void |
| { |
| traits = []; |
| objects = []; |
| strings = []; |
| } |
| |
| /** |
| * Check whether the trait info reference table |
| * already contains this list of traits. If found, |
| * the index of the trait info is returned, starting |
| * from 0. If not found -1 is returned. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function findTraitInfo(traitInfo:Object):int |
| { |
| for (var i:uint = 0; i < traits.length; i++) |
| { |
| var ti:Object = traits[i]; |
| |
| if (ti.alias == traitInfo.alias |
| && ti.properties.length == traitInfo.properties.length) |
| { |
| var j:uint = 0; |
| for (; j < ti.properties.length; j++) |
| { |
| if (ti.properties[i] != traitInfo.properties[j]) |
| { |
| break; |
| } |
| } |
| |
| if (j == traitInfo.properties.length) |
| { |
| //Match found |
| return i; |
| } |
| } |
| } |
| |
| return -1; |
| } |
| |
| /** |
| * Check whether the object reference table |
| * already contains this object. If found, the index |
| * of the object is returned, starting from 0. If |
| * not found -1 is returned. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function findObject(object:Object):int |
| { |
| for (var i:uint = 0; i < objects.length; i++) |
| { |
| var o:Object = objects[i]; |
| if (o === object) |
| { |
| return i; |
| } |
| } |
| |
| return -1; |
| } |
| |
| /** |
| * Check whether the string reference table |
| * already contains this string. If found, the index |
| * of the string is returned, starting from 0. If |
| * not found (or if the value passed is the empty string) |
| * -1 is returned. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function findString(str:String):int |
| { |
| if (str != "") |
| { |
| for (var i:uint = 0; i < strings.length; i++) |
| { |
| var s:String = strings[i]; |
| if (s == str) |
| { |
| return i; |
| } |
| } |
| } |
| |
| return -1; |
| } |
| |
| /** |
| * Remember the trait info for an object in this context |
| * for an encoding or decoding session. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function addTraitInfo(traitInfo:Object):void |
| { |
| traits.push(traitInfo); |
| } |
| |
| /** |
| * Remember an object in this context for an encoding |
| * or decoding session. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function addObject(obj:Object):void |
| { |
| objects.push(obj); |
| } |
| |
| /** |
| * Remember a string in this context for an encoding |
| * or decoding session. Note that the empty string |
| * is not remembered as it should not be serialized |
| * by reference. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function addString(str:String):void |
| { |
| if (str != "") |
| { |
| strings.push(str); |
| } |
| } |
| |
| |
| /** |
| * Retrieve trait info for an object by its reference |
| * table index. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function getTraitInfo(ref:uint):* |
| { |
| return traits[ref]; |
| } |
| |
| /** |
| * Retrieve an object by its reference table index. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function getObject(ref:uint):* |
| { |
| return objects[ref]; |
| } |
| |
| /** |
| * Retrieve a string by its reference table index. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function getString(ref:uint):String |
| { |
| return strings[ref]; |
| } |
| |
| /** |
| * Trait Info reference table |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| internal var traits:Array; |
| |
| /** |
| * Object reference table |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| internal var objects:Array; |
| |
| /** |
| * Strings reference table |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| internal var strings:Array; |
| |
| /** |
| * Log for the current encoder/decoder context. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public var log:ILogger; |
| } |
| |
| } |