The ChannelSet is a set of Channels that are used to send messages to a target destination. The ChannelSet improves the quality of service on the client by hunting through its Channels to send messages in the face of network failures or individual Channel problems.

Constructor

@:value({ clusteredWithURLLoadBalancing : false, channelIds : null })new(?channelIds:Array<String>, clusteredWithURLLoadBalancing:Bool = false)

Constructs a ChannelSet. If the channelIds argument is provided, the ChannelSet will use automatically configured Channels obtained via ServerConfig.getChannel() to reach a destination. Attempting to manually assign Channels to a ChannelSet that uses configured Channels is not allowed.

If the channelIds argument is not provided or is null, Channels must be manually created and added to the ChannelSet in order to connect and send messages.

If the ChannelSet is clustered using url-load-balancing (where each server declares a unique RTMP or HTTP URL and the client fails over from one URL to the next), the first time that a Channel in the ChannelSet successfully connects the ChannelSet will automatically make a request for all of the endpoints across the cluster for all member Channels and will assign these failover URLs to each respective Channel. This allows Channels in the ChannelSet to failover individually, and when failover options for a specific Channel are exhausted the ChannelSet will advance to the next Channel in the set to attempt to reconnect.

Regardless of clustering, if a Channel cannot connect or looses connectivity, the ChannelSet will advance to its next available Channel and attempt to reconnect. This allows the ChannelSet to hunt through Channels that use different protocols, ports, etc., in search of one that can connect to its endpoint successfully.

Parameters:

channelIds

The ids of configured Channels obtained from ServerConfig for this ChannelSet to use. If null, Channels must be manually added to the ChannelSet.

clusteredWithURLLoadBalancing

True if the Channels in the ChannelSet are clustered using url load balancing.

Variables

@:flash.propertyread onlyauthenticated:Bool

Indicates whether the ChannelSet has an underlying Channel that successfully authenticated with its endpoint.

@:flash.propertyread onlychannelIds:Array<String>

The ids of the Channels used by the ChannelSet.

@:flash.propertychannels:Array<Channel>

Provides access to the Channels in the ChannelSet. This property may be used to assign a set of channels at once or channels may be added directly to the ChannelSet via addChannel() individually. If this ChannelSet is configured automatically the individual channels are created lazily and added to this property as needed.

Throws:

flash.errors.IllegalOperationError

If the ChannelSet is configured, assigning to this property is not allowed.

@:flash.propertyclustered:Bool

Indicates whether the ChannelSet targets a clustered destination. If true, upon a successful connection the ChannelSet will query the destination for all clustered endpoints for its Channels and will assign failoverURIs to them. Channel ids are used to assign failoverURIs to the proper Channel instances so this requires that all Channels in the ChannelSet have non-null ids and an Error will be thrown when this property is set to true if this is not the case. If the ChannelSet is not using url load balancing on the client this property should not be set to true.

@:flash.propertyread onlyconnected:Bool

Indicates whether the ChannelSet is connected.

@:flash.propertyread onlycurrentChannel:Channel

Returns the current Channel for the ChannelSet.

@:flash.propertyheartbeatInterval:Int

The number of milliseconds between heartbeats sent to the remote host while this ChannelSet is actively connected but idle. Any outbound message traffic will delay heartbeats temporarily, with this number of milliseconds elapsing after the last sent message before the next heartbeat is issued.

This property is useful for applications that connect to a remote host to received pushed updates and are not actively sending any messages, but still wish to be notified of a dropped connection even when the networking layer fails to provide such notification directly. By issuing periodic heartbeats the client can force the networking layer to report a timeout if the underlying connection has dropped without notification and the application can respond to the disconnect appropriately.

Any non-positive value disables heartbeats to the remote host. The default value is 0 indicating that heartbeats are disabled. If the application sets this value it should prefer a longer rather than shorter interval, to avoid placing unnecessary load on the remote host. As an illustrative example, low-level TCP socket keep-alives generally default to an interval of 2 hours. That is a longer interval than most applications that enable heartbeats will likely want to use, but it serves as a clear precedent to prefer a longer interval over a shorter interval.

If the currently connected underlying Channel issues poll requests to the remote host, heartbeats are suppressed because the periodic poll requests effectively take their place.

@:flash.propertyinitialDestinationId:String

Provides access to the initial destination this ChannelSet is used to access. When the clustered property is true, this value is used to request available failover URIs for the configured channels for the destination.

@:flash.propertyread onlymessageAgents:Array<MessageAgent>

Provides access to the set of MessageAgents that use this ChannelSet.

Methods

addChannel(channel:Channel):Void

Adds a Channel to the ChannelSet. A Channel with a null id cannot be added to the ChannelSet if the ChannelSet targets a clustered destination.

Parameters:

channel

The Channel to add.

Throws:

flash.errors.IllegalOperationError

If the ChannelSet is configured, adding a Channel is not supported. This error is also thrown if the ChannelSet's clustered property is true but the Channel has a null id.

channelConnectHandler(event:ChannelEvent):Void

Handles a CONNECT ChannelEvent and redispatches the event.

Parameters:

event

The ChannelEvent.

channelDisconnectHandler(event:ChannelEvent):Void

Handles a DISCONNECT ChannelEvent and redispatches the event.

Parameters:

event

The ChannelEvent.

channelFaultHandler(event:ChannelFaultEvent):Void

Handles a ChannelFaultEvent and redispatches the event.

Parameters:

event

The ChannelFaultEvent.

connect(agent:MessageAgent):Void

Connects a MessageAgent to the ChannelSet. Once connected, the agent can use the ChannelSet to send messages.

Parameters:

agent

The MessageAgent to connect.

disconnect(agent:MessageAgent):Void

Disconnects a specific MessageAgent from the ChannelSet. If this is the last MessageAgent using the ChannelSet and the current Channel in the set is connected, the Channel will physically disconnect from the server.

Parameters:

agent

The MessageAgent to disconnect.

disconnectAll():Void

Disconnects all associated MessageAgents and disconnects any underlying Channel that is connected. Unlike disconnect(MessageAgent) which is invoked by the disconnect implementations of specific service components, this method provides a single, convenient point to shut down connectivity between the client and server.

@:value({ charset : null })login(username:String, password:String, ?charset:String):AsyncToken

Authenticates the ChannelSet with the server using the provided credentials. Unlike other operations on Channels and the ChannelSet, this operation returns an AsyncToken that client code may add a responder to in order to handle success or failure directly. If the ChannelSet is not connected to the server when this method is invoked it will trigger a connect attempt, and if successful, send the login command to the server. Only one login or logout operation may be pending at a time and overlapping calls will generate an IllegalOperationError. Invoking login when the ChannelSet is already authenticated will generate also generate an IllegalOperationError.

Parameters:

username

The username.

password

The password.

charset

The character set encoding to use while encoding the credentials. The default is null, which implies the legacy charset of ISO-Latin-1. The only other supported charset is "UTF-8".

Returns:

Returns a token that client code may add a responder to in order to handle success or failure directly.

Throws:

flash.errors.IllegalOperationError

in two situations; if the ChannelSet is already authenticated, or if a login or logout operation is currently in progress.

@:value({ agent : null })logout(?agent:MessageAgent):AsyncToken

Logs the ChannelSet out from the server. Unlike other operations on Channels and the ChannelSet, this operation returns an AsyncToken that client code may add a responder to in order to handle success or failure directly. If logout is successful any credentials that have been cached for use in automatic reconnects are cleared for the ChannelSet and its Channels and their authenticated state is set to false. If the ChannelSet is not connected to the server when this method is invoked it will trigger a connect attempt, and if successful, send a logout command to the server.

The MessageAgent argument is present to support legacy logout behavior and client code that invokes this method should not pass a MessageAgent reference. Just invoke logout() passing no arguments.

This method is also invoked by service components from their logout() methods, and these components pass a MessageAgent reference to this method when they logout. The presence of this argument is the trigger to execute legacy logout behavior that differs from the new behavior described above. Legacy behavior only sends a logout request to the server if the client is connected and authenticated. If these conditions are not met the legacy behavior for this method is to do nothing other than clear any credentials that have been cached for use in automatic reconnects.

Parameters:

agent

Legacy argument. The MessageAgent that is initiating the logout.

Returns:

Returns a token that client code may add a responder to in order to handle success or failure directly.

Throws:

flash.errors.IllegalOperationError

if a login or logout operation is currently in progress.

removeChannel(channel:Channel):Void

Removes a Channel from the ChannelSet. If the Channel to remove is currently connected and being used by the ChannelSet, it is disconnected as well as removed.

Parameters:

channel

The Channel to remove.

Throws:

flash.errors.IllegalOperationError

If the ChannelSet is configured, removing a Channel is not supported.

send(agent:MessageAgent, message:IMessage):Void

Sends a message from a MessageAgent over the currently connected Channel.

Parameters:

agent

The MessageAgent sending the message.

message

The Message to send.

Throws:

mx.messaging.errors.NoChannelAvailableError

If the ChannelSet has no internal Channels to use.

@:value({ charset : null })setCredentials(credentials:String, agent:MessageAgent, ?charset:String):Void

Stores the credentials and passes them through to every connected channel.

Parameters:

credentials

The credentials for the MessageAgent.

agent

The MessageAgent that is setting the credentials.

charset

The character set encoding used while encoding the credentials. The default is null, which implies the legacy encoding of ISO-Latin-1.

Throws:

flash.errors.IllegalOperationError

in two situations; if credentials have already been set and an authentication is in progress with the remote detination, or if authenticated and the credentials specified don't match the currently authenticated credentials.

toString():String

Returns a String containing the ids of the Channels in the ChannelSet.

Returns:

String representation of the ChannelSet.