Package org.eclipse.emf.cdo.session.remote

## Interface CDORemoteSessionManager

- All Superinterfaces:
    `org.eclipse.net4j.util.container.IContainer<CDORemoteSession>`, `org.eclipse.net4j.util.event.INotifier`
  All Known Subinterfaces:
    `InternalCDORemoteSessionManager`

      public interface CDORemoteSessionManager
      extends org.eclipse.net4j.util.container.IContainer<CDORemoteSession>

  Provides collaborative access to the `remote sessions` that are connected to the same repository as the `local session`. A CDORemoteSessionManager can be subscribed or unsubscribed to changes in the set of remote sessions. It is subscribed if at least one is true:
  1. At least one `listener` is registered with this remote session manager.
  2. `Force subscription` is `true`.
  If this remote session manager is subscribed it eventually fires the following `events` to `registered` listeners:
  - `IContainerEvent` with `CDORemoteSession` as generic type argument to reflect opened or closed remote sessions.
  - `CDORemoteSessionEvent.SubscriptionChanged` to reflect the ability of the remote session to receive and possibly handle remote messages from other sessions.
  - `CDORemoteSessionEvent.MessageReceived` to deliver custom data `sent` from other sessions .
  Since:
    2.0
  Author:
    Eike Stepper
  No Implement
    This interface is not intended to be implemented by clients.
  No Extend
    This interface is not intended to be extended by clients.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `CDORemoteSessionManager.EventAdapter` | A default adapter for all kinds of `remote session` related events.
    `static interface` | `CDORemoteSessionManager.LocalSubscriptionChangedEvent` | An `event` that is fired by a `remote session manager` after the `subscription mode` of the `local session` changed.

    - ### Nested classes/interfaces inherited from interface org.eclipse.net4j.util.container.IContainer

      `org.eclipse.net4j.util.container.IContainer.Modifiable<E extends java.lang.Object>, org.eclipse.net4j.util.container.IContainer.Persistable<E extends java.lang.Object>, org.eclipse.net4j.util.container.IContainer.Persistence<E extends java.lang.Object>`

    - ### Nested classes/interfaces inherited from interface org.eclipse.net4j.util.event.INotifier

      `org.eclipse.net4j.util.event.INotifier.INotifier2`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `CDOSession` | `getLocalSession()` | Returns the `local session` this CDORemoteSessionManager belongs to.
    `CDORemoteSession[]` | `getRemoteSessions()` | Returns the set of `remote sessions` that are connected to the same repository as the `local session`.
    `boolean` | `isForceSubscription()` | Returns `true` if this CDORemoteSessionManager shall be subscribed to changes in the set of remote sessions and delivers `custom data events` even if no `listener` is registered, `false` otherwise.
    `boolean` | `isSubscribed()` | Returns `true` if this CDORemoteSessionManager is subscribed to changes in the set of remote sessions and delivers `custom data events`, `false` otherwise.
    `java.util.Set<CDORemoteSession>` | `sendMessage​(CDORemoteSessionMessage message, java.util.Collection<CDORemoteSession> recipients)` | Same as `sendMessage(CDORemoteSessionMessage, CDORemoteSession...)` but with a recipients `collection`.
    `java.util.Set<CDORemoteSession>` | `sendMessage​(CDORemoteSessionMessage message, CDORemoteSession... recipients)` | Sends a multicast message to the subscribed recipients.
    `void` | `setForceSubscription​(boolean forceSubscription)` | Enables or disables subscription to changes in the set of remote sessions even if no `listener` is registered.

    - ### Methods inherited from interface org.eclipse.net4j.util.container.IContainer

      `getElements, isEmpty`

    - ### Methods inherited from interface org.eclipse.net4j.util.event.INotifier

      `addListener, getListeners, hasListeners, removeListener`

- - ### Method Detail

    - #### getLocalSession

          CDOSession getLocalSession()

      Returns the `local session` this CDORemoteSessionManager belongs to.

    - #### getRemoteSessions

          CDORemoteSession[] getRemoteSessions()

      Returns the set of `remote sessions` that are connected to the same repository as the `local session`. If this CDORemoteSessionManager itself is `subscribed` the result is returned from a local cache for remote sessions, otherwise it is requested from the server each time this method is called.

    - #### isSubscribed

          boolean isSubscribed()

      Returns `true` if this CDORemoteSessionManager is subscribed to changes in the set of remote sessions and delivers `custom data events`, `false` otherwise. It is subscribed if at least one is true:
      1. At least one `listener` is registered with this remote session manager.
      2. `Force subscription` is `true`.
      See Also:
        `INotifier.addListener(IListener)`, `setForceSubscription(boolean)`

    - #### isForceSubscription

          boolean isForceSubscription()

      Returns `true` if this CDORemoteSessionManager shall be subscribed to changes in the set of remote sessions and delivers `custom data events` even if no `listener` is registered, `false` otherwise.
      See Also:
        `INotifier.addListener(IListener)`, `setForceSubscription(boolean)`

    - #### setForceSubscription

          void setForceSubscription​(boolean forceSubscription)

      Enables or disables subscription to changes in the set of remote sessions even if no `listener` is registered.
      See Also:
        `INotifier.addListener(IListener)`, `setForceSubscription(boolean)`

    - #### sendMessage

          java.util.Set<CDORemoteSession> sendMessage​(CDORemoteSessionMessage message,
                                                      CDORemoteSession... recipients)

      Sends a multicast message to the subscribed recipients.
      Returns:
        The set of `recipients` that the message has been forwarded to by the server. Note: No assumption must be made on whether a recipient session received the message and was able to handle it adequately!
      Since:
        3.0

    - #### sendMessage

          java.util.Set<CDORemoteSession> sendMessage​(CDORemoteSessionMessage message,
                                                      java.util.Collection<CDORemoteSession> recipients)

      Same as `sendMessage(CDORemoteSessionMessage, CDORemoteSession...)` but with a recipients `collection`.
      Since:
        3.0