Skip to main content

IAudience Interface

Represents all clients connected to the op stream, both read-only and read/write.

Signature

export interface IAudience extends IEventProvider<IAudienceEvents>

Extends: IEventProvider<IAudienceEvents>

Remarks

Access to the Audience when a container is disconnected is a tricky subject. See the remarks on specific methods for more details.

Methods

Method Return Type Description
getMember(clientId) IClient | undefined Get details about the connected client with the specified clientId, or undefined if the specified client isn't connected.
getMembers() Map<string, IClient> List all clients connected to the op stream, keyed off their clientId.
getSelf() ISelf | undefined Returns information about client's connection. Please see ISelf member descriptions for more details. undefined if this client has never connected to the ordering service. Please see clientId for more details on when values returned by this function change over time.

Method Details

getMember

Get details about the connected client with the specified clientId, or undefined if the specified client isn't connected.

Signature

getMember(clientId: string): IClient | undefined;

Remarks

When the container is disconnected, there are no guarantees about the correctness of what this method returns. The default implementation in Fluid Framework continues to return members that were part of the audience when the container disconnected, but this could change in the future. Other implementations could decide to always return undefined, or only return an IClient when the local client is requested.

Note that the clientId that a disconnected container might see for itself is an old one. A disconnected container does not technically have a clientId tied to an active connection to the service.

Parameters

Parameter Type Description
clientId string

Returns

Return type: IClient | undefined

getMembers

List all clients connected to the op stream, keyed off their clientId.

Signature

getMembers(): Map<string, IClient>;

Remarks

When the container is disconnected, there are no guarantees about the correctness of what this method returns. The default implementation in Fluid Framework continues to return the list of members as it last saw it before the container disconnected, but this could change in the future. Other implementations could decide to return an empty list, or a list that only includes the local client.

Note that the clientId that a disconnected container might see for itself is an old one. A disconnected container does not technically have a clientId tied to an active connection to the service.

Returns

Return type: Map<string, IClient>

getSelf

Returns information about client's connection. Please see ISelf member descriptions for more details. undefined if this client has never connected to the ordering service. Please see clientId for more details on when values returned by this function change over time.

Signature

getSelf(): ISelf | undefined;

Remarks

This API is experimental.

Reconnection process will have these phases: 1. Establishing connection phase: - new connection clientId is added to member's list. That said, self.clientId still reflects old information. - The old client's information is removed from members' list. getMember(self.clientId) will return undefined. 2. Catch-up phase. Client catches up on latest ops and becomes current. 3. "connect" phase - the following happens synchronously: - getSelf() information changes to reflect new connection - "selfChanged" event on this object fires - Various API surfaces may expose "connected" event. This event fires at the same time as self changes. That said, "connected" event will not fire at IContainerRuntime layer if container is read-only.

That said, at the moment this is an experimental API. It depends on some experimental settings that might change in the future. Events described in phase #3 may not happen at the same time if kill-bit feature gates are engaged due to a bug discovered in new logic that delivers this functionality. Once it's proven (at scale) that everything works well, experimental tag will be removed. Also application that deploy loader & container runtime bundles independently will see new (synchronized) behavior only when loader changes are deployed. Newer runtimes will continue to observe old (non-synchronized) behavior when paired with older loader code.

When promises in phase #3 are broken (due to conditions described above), consumers could experience current clientId being changed (and "selfChanged" event fired) while 1. Such clientId is not present in Audience 2. Client is not fully caught up

Returns

Return type: ISelf | undefined