| //////////////////////////////////////////////////////////////////////////////// |
| // |
| // 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 |
| { |
| |
| import flash.events.EventDispatcher; |
| |
| import mx.core.mx_internal; |
| import mx.events.PropertyChangeEvent; |
| |
| use namespace mx_internal; |
| |
| /** |
| * Dispatched when a property of the FlexClient singleton changes. |
| * Listeners must be added via FlexClient.getInstance().addEventListener(...). |
| * |
| * @eventType mx.events.PropertyChangeEvent.PROPERTY_CHANGE |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| [Event(name="propertyChange", type="mx.events.PropertyChangeEvent")] |
| |
| /** |
| * Singleton class that stores the global Id for this Player instance that is |
| * server assigned when the client makes its initial connection to the server. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public class FlexClient extends EventDispatcher |
| { |
| //-------------------------------------------------------------------------- |
| // |
| // Class constants |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * @private |
| * This value is passed to the server in an initial client connect to |
| * indicate that the client needs a server-assigned FlexClient Id. |
| */ |
| mx_internal static const NULL_FLEXCLIENT_ID:String = "nil"; |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Class variables |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * @private |
| * The sole instance of this singleton class. |
| */ |
| private static var _instance:FlexClient; |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Class methods |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * Returns the sole instance of this singleton class, |
| * creating it if it does not already exist. |
| * |
| * @return Returns the sole instance of this singleton class, |
| * creating it if it does not already exist. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public static function getInstance():FlexClient |
| { |
| if (_instance == null) |
| _instance = new FlexClient(); |
| |
| return _instance; |
| } |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Constructor |
| // |
| //-------------------------------------------------------------------------- |
| |
| /** |
| * @private |
| * Constructor. |
| */ |
| public function FlexClient() |
| { |
| super(); |
| } |
| |
| //-------------------------------------------------------------------------- |
| // |
| // Properties |
| // |
| //-------------------------------------------------------------------------- |
| |
| //---------------------------------- |
| // id |
| //---------------------------------- |
| |
| /** |
| * @private |
| * Storage for the global FlexClient Id for the Player instance. |
| * This value is server assigned and is set as part of the Channel connect process. |
| */ |
| private var _id:String; |
| |
| [Bindable(event="propertyChange")] |
| /** |
| * The global FlexClient Id for this Player instance. |
| * This value is server assigned and is set as part of the Channel connect process. |
| * Once set, it will not change for the duration of the Player instance's lifespan. |
| * If no Channel has connected to a server this value is null. |
| * |
| * @langversion 3.0 |
| * @playerversion Flash 9 |
| * @playerversion AIR 1.1 |
| * @productversion BlazeDS 4 |
| * @productversion LCDS 3 |
| */ |
| public function get id():String |
| { |
| return _id; |
| } |
| |
| /** |
| * @private |
| */ |
| public function set id(value:String):void |
| { |
| if (_id != value) |
| { |
| var event:PropertyChangeEvent = PropertyChangeEvent.createUpdateEvent(this, "id", _id, value); |
| _id = value; |
| dispatchEvent(event); |
| } |
| } |
| |
| //---------------------------------- |
| // waitForFlexClientId |
| //---------------------------------- |
| |
| /** |
| * @private |
| */ |
| private var _waitForFlexClientId:Boolean = false; // Initialize to false so the first Channel that checks this can attempt to connect. |
| |
| [Bindable(event="propertyChange")] |
| /** |
| * @private |
| * Guard condition that Channel instances use to coordinate their connect attempts during application startup |
| * when a FlexClient Id has not yet been returned by the server. |
| * The initial Channel connect process must be serialized. |
| * Once a FlexClient Id is set further Channel connects and disconnects do not require synchronization. |
| */ |
| mx_internal function get waitForFlexClientId():Boolean |
| { |
| return _waitForFlexClientId; |
| } |
| |
| /** |
| * @private |
| */ |
| mx_internal function set waitForFlexClientId(value:Boolean):void |
| { |
| if (_waitForFlexClientId != value) |
| { |
| var event:PropertyChangeEvent = PropertyChangeEvent.createUpdateEvent(this, "waitForFlexClientId", _waitForFlexClientId, value); |
| _waitForFlexClientId = value; |
| dispatchEvent(event); |
| } |
| } |
| } |
| |
| } |