Package org.eclipse.spi.net4j

## Class ChannelMultiplexer

- java.lang.Object
- - org.eclipse.net4j.util.event.Notifier
  - - org.eclipse.net4j.util.lifecycle.Lifecycle
    - - org.eclipse.net4j.util.lifecycle.ShareableLifecycle
      - - org.eclipse.net4j.util.container.Container<IChannel>
        - - org.eclipse.spi.net4j.ChannelMultiplexer

- All Implemented Interfaces:
    `IBufferProvider`, `IChannelMultiplexer`, `ILocationAware`, `ITransportConfigAware`, `org.eclipse.net4j.util.concurrent.IExecutorServiceProvider`, `org.eclipse.net4j.util.container.IContainer<IChannel>`, `org.eclipse.net4j.util.event.INotifier`, `org.eclipse.net4j.util.event.INotifier.INotifier2`, `org.eclipse.net4j.util.lifecycle.IDeactivateable`, `org.eclipse.net4j.util.lifecycle.ILifecycle`, `org.eclipse.net4j.util.lifecycle.ILifecycle.DeferrableActivation`, `org.eclipse.net4j.util.properties.IPropertiesContainer`, `InternalChannelMultiplexer`, `InverseCloseable`
  Direct Known Subclasses:
    `Connector`

      public abstract class ChannelMultiplexer
      extends org.eclipse.net4j.util.container.Container<IChannel>
      implements InternalChannelMultiplexer, org.eclipse.net4j.util.concurrent.IExecutorServiceProvider, InverseCloseable

  If the meaning of this type isn't clear, there really should be more of a description here...
  Since:
    2.0
  Author:
    Eike Stepper

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.eclipse.net4j.buffer.IBufferProvider

      `IBufferProvider.Introspection, IBufferProvider.Notification`

    - ### 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.lifecycle.ILifecycle

      `org.eclipse.net4j.util.lifecycle.ILifecycle.DeferrableActivation`

    - ### Nested classes/interfaces inherited from interface org.eclipse.net4j.ILocationAware

      `ILocationAware.Location`

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

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

    - ### Nested classes/interfaces inherited from interface org.eclipse.spi.net4j.InternalChannelMultiplexer

      `InternalChannelMultiplexer.BufferMultiplexer`

  - ### Field Summary

    - ### Fields inherited from class org.eclipse.net4j.util.lifecycle.Lifecycle

      `USE_LABEL`

    - ### Fields inherited from interface org.eclipse.net4j.channel.IChannelMultiplexer

      `DEFAULT_OPEN_CHANNEL_TIMEOUT, NO_CHANNEL_TIMEOUT`

    - ### Fields inherited from interface org.eclipse.spi.net4j.InternalChannelMultiplexer

      `CONTEXT_MULTIPLEXER, RESERVED_CHANNEL`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `ChannelMultiplexer()` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `closeChannel​(InternalChannel channel)` |
    `protected InternalChannel` | `createChannel()` |
    `protected abstract org.eclipse.net4j.util.security.INegotiationContext` | `createNegotiationContext()` |
    `protected <INFRA_STRUCTURE> IProtocol<INFRA_STRUCTURE>` | `createProtocol​(java.lang.String type, INFRA_STRUCTURE infraStructure)` |
    `protected org.eclipse.net4j.util.factory.IFactoryKey` | `createProtocolFactoryKey​(java.lang.String type)` |
    `protected abstract void` | `deregisterChannelFromPeer​(InternalChannel channel)` |
    `protected void` | `doBeforeOpenChannel​(IProtocol<?> protocol)` |
    `protected void` | `doDeactivate()` |
    `InternalChannel` | `getChannel​(short channelID)` |
    `java.util.Collection<IChannel>` | `getChannels()` | Returns a collection of currently open channels.
    `ITransportConfig` | `getConfig()` | Returns the current transport configuration if there is one, a new empty one otherwise.
    `IChannel[]` | `getElements()` |
    `java.util.concurrent.ExecutorService` | `getExecutorService()` |
    `long` | `getOpenChannelTimeout()` |
    `protected void` | `initChannel​(InternalChannel channel, IProtocol<?> protocol)` |
    `void` | `inverseClose()` |
    `void` | `inverseCloseChannel​(short channelID)` |
    `InternalChannel` | `inverseOpenChannel​(short channelID, java.lang.String protocolID)` | Deprecated. Use `inverseOpenChannel(short, String, int)`.
    `InternalChannel` | `inverseOpenChannel​(short channelID, java.lang.String protocolID, int protocolVersion)` |
    `boolean` | `isEmpty()` |
    `InternalChannel` | `openChannel()` | Synchronous request to open a new `IChannel` with an undefined channel protocol.
    `InternalChannel` | `openChannel​(java.lang.String protocolID, java.lang.Object infraStructure)` | Synchronous request to open a new `IChannel` with a channel protocol defined by a given protocol identifier.
    `InternalChannel` | `openChannel​(IProtocol<?> protocol)` | Synchronous request to open a new `IChannel` with the given channel protocol .
    `org.eclipse.net4j.util.registry.IRegistry<java.lang.String,​java.lang.Object>` | `properties()` |
    `protected abstract void` | `registerChannelWithPeer​(short channelID, long timeout, IProtocol<?> protocol)` |
    `void` | `setConfig​(ITransportConfig config)` | Sets a new transport configuration by copying the given one.
    `void` | `setOpenChannelTimeout​(long openChannelTimeout)` |

    - ### Methods inherited from class org.eclipse.net4j.util.container.Container

      `fireContainerEvent, fireContainerEvent, fireContainerEvent, fireElementAddedEvent, fireElementRemovedEvent, fireElementsAddedEvent, fireElementsRemovedEvent, fireEvent, newContainerEvent, newContainerEvent`

    - ### Methods inherited from class org.eclipse.net4j.util.lifecycle.Lifecycle

      `activate, checkActive, checkArg, checkArg, checkInactive, checkNull, checkState, checkState, deactivate, deferredActivate, doActivate, doAfterActivate, doBeforeActivate, doBeforeDeactivate, dump, getLifecycleState, isActive, isDeferredActivation, toString`

    - ### Methods inherited from class org.eclipse.net4j.util.event.Notifier

      `addListener, addUniqueListener, fireEvent, fireEvent, fireThrowable, firstListenerAdded, getListeners, getNotificationService, hasListener, hasListeners, lastListenerRemoved, listenerAdded, listenerRemoved, removeListener`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface org.eclipse.net4j.buffer.IBufferProvider

      `getBufferCapacity, provideBuffer, retainBuffer`

    - ### Methods inherited from interface org.eclipse.net4j.ILocationAware

      `getLocation, isClient, isServer`

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

      `addListener, getListeners, hasListeners, removeListener`

    - ### Methods inherited from interface org.eclipse.spi.net4j.InternalChannelMultiplexer

      `multiplexChannel`

- - ### Constructor Detail

    - #### ChannelMultiplexer

          public ChannelMultiplexer()

  - ### Method Detail

    - #### properties

          public final org.eclipse.net4j.util.registry.IRegistry<java.lang.String,​java.lang.Object> properties()

      Specified by:
        `properties` in interface `org.eclipse.net4j.util.properties.IPropertiesContainer`
      Since:
        4.12

    - #### getConfig

          public ITransportConfig getConfig()

      Description copied from interface: `ITransportConfigAware`
      Returns the current transport configuration if there is one, a new empty one otherwise.
      Specified by:
        `getConfig` in interface `ITransportConfigAware`

    - #### setConfig

          public void setConfig​(ITransportConfig config)

      Description copied from interface: `ITransportConfigAware`
      Sets a new transport configuration by copying the given one.
      Specified by:
        `setConfig` in interface `ITransportConfigAware`

    - #### getExecutorService

          public java.util.concurrent.ExecutorService getExecutorService()

      Specified by:
        `getExecutorService` in interface `org.eclipse.net4j.util.concurrent.IExecutorServiceProvider`

    - #### getOpenChannelTimeout

          public long getOpenChannelTimeout()

      Specified by:
        `getOpenChannelTimeout` in interface `IChannelMultiplexer`

    - #### setOpenChannelTimeout

          public void setOpenChannelTimeout​(long openChannelTimeout)

      Specified by:
        `setOpenChannelTimeout` in interface `IChannelMultiplexer`

    - #### getChannel

          public final InternalChannel getChannel​(short channelID)

    - #### getChannels

          public final java.util.Collection<IChannel> getChannels()

      Description copied from interface: `IChannelMultiplexer`
      Returns a collection of currently open channels.
      Specified by:
        `getChannels` in interface `IChannelMultiplexer`

    - #### isEmpty

          public boolean isEmpty()

      Specified by:
        `isEmpty` in interface `org.eclipse.net4j.util.container.IContainer<IChannel>`
      Overrides:
        `isEmpty` in class `org.eclipse.net4j.util.container.Container<IChannel>`

    - #### getElements

          public IChannel[] getElements()

      Specified by:
        `getElements` in interface `org.eclipse.net4j.util.container.IContainer<IChannel>`

    - #### openChannel

          public InternalChannel openChannel()
                                      throws ChannelException

      Description copied from interface: `IChannelMultiplexer`
      Synchronous request to open a new `IChannel` with an undefined channel protocol. Since the peer connector can't lookup a protocol `factory` without a protocol identifier the `IBufferHandler` of the peer `IChannel` can only be provided by externally provided channel `lifecycle` `listeners`.

      Specified by:
        `openChannel` in interface `IChannelMultiplexer`
      Throws:
        `ChannelException`
      See Also:
        `IChannelMultiplexer.openChannel(String, Object)`, `IChannelMultiplexer.openChannel(IProtocol)`

    - #### openChannel

          public InternalChannel openChannel​(java.lang.String protocolID,
                                             java.lang.Object infraStructure)
                                      throws ChannelException

      Description copied from interface: `IChannelMultiplexer`
      Synchronous request to open a new `IChannel` with a channel protocol defined by a given protocol identifier. The peer connector will lookup a protocol `factory` with the protocol identifier, create a `IBufferHandler` and inject it into the peer `IChannel`.

      Specified by:
        `openChannel` in interface `IChannelMultiplexer`
      Throws:
        `ChannelException`
      See Also:
        `IChannelMultiplexer.openChannel()`, `IChannelMultiplexer.openChannel(IProtocol)`

    - #### openChannel

          public InternalChannel openChannel​(IProtocol<?> protocol)
                                      throws ChannelException

      Description copied from interface: `IChannelMultiplexer`
      Synchronous request to open a new `IChannel` with the given channel protocol . The peer connector will lookup a protocol `factory` with the protocol identifier, create a `IBufferHandler` and inject it into the peer channel.

      Specified by:
        `openChannel` in interface `IChannelMultiplexer`
      Throws:
        `ChannelException`
      See Also:
        `IChannelMultiplexer.openChannel()`, `IChannelMultiplexer.openChannel(String, Object)`

    - #### inverseOpenChannel

          @Deprecated
          public InternalChannel inverseOpenChannel​(short channelID,
                                                    java.lang.String protocolID)

      Deprecated.
      Use `inverseOpenChannel(short, String, int)`.

    - #### inverseOpenChannel

          public InternalChannel inverseOpenChannel​(short channelID,
                                                    java.lang.String protocolID,
                                                    int protocolVersion)

      Since:
        4.2

    - #### closeChannel

          public void closeChannel​(InternalChannel channel)
                            throws ChannelException

      Specified by:
        `closeChannel` in interface `InternalChannelMultiplexer`
      Throws:
        `ChannelException`

    - #### inverseCloseChannel

          public void inverseCloseChannel​(short channelID)
                                   throws ChannelException

      Throws:
        `ChannelException`

    - #### inverseClose

          public void inverseClose()

      Specified by:
        `inverseClose` in interface `InverseCloseable`

    - #### createChannel

          protected InternalChannel createChannel()

    - #### initChannel

          protected void initChannel​(InternalChannel channel,
                                     IProtocol<?> protocol)

    - #### createProtocol

          protected <INFRA_STRUCTURE> IProtocol<INFRA_STRUCTURE> createProtocol​(java.lang.String type,
                                                                                INFRA_STRUCTURE infraStructure)

    - #### createProtocolFactoryKey

          protected org.eclipse.net4j.util.factory.IFactoryKey createProtocolFactoryKey​(java.lang.String type)

    - #### doBeforeOpenChannel

          protected void doBeforeOpenChannel​(IProtocol<?> protocol)

    - #### doDeactivate

          protected void doDeactivate()
                               throws java.lang.Exception

      Overrides:
        `doDeactivate` in class `org.eclipse.net4j.util.lifecycle.Lifecycle`
      Throws:
        `java.lang.Exception`

    - #### createNegotiationContext

          protected abstract org.eclipse.net4j.util.security.INegotiationContext createNegotiationContext()

    - #### registerChannelWithPeer

          protected abstract void registerChannelWithPeer​(short channelID,
                                                          long timeout,
                                                          IProtocol<?> protocol)
                                                   throws ChannelException

      Throws:
        `ChannelException`

    - #### deregisterChannelFromPeer

          protected abstract void deregisterChannelFromPeer​(InternalChannel channel)
                                                     throws ChannelException

      Throws:
        `ChannelException`