Package org.eclipse.net4j.channel

## Interface IChannel

- All Superinterfaces:
    `org.eclipse.net4j.util.collection.Closeable`, `IBufferHandler`, `ILocationAware`, `org.eclipse.net4j.util.event.INotifier`, `org.eclipse.net4j.util.security.IUserAware`
  All Known Subinterfaces:
    `IJVMChannel`, `InternalChannel`
  All Known Implementing Classes:
    `Channel`

      public interface IChannel
      extends ILocationAware, org.eclipse.net4j.util.security.IUserAware, IBufferHandler, org.eclipse.net4j.util.event.INotifier, org.eclipse.net4j.util.collection.Closeable

  A bidirectional communications channel for the asynchronous exchange of `buffers`. A channel is lightweight and virtual in the sense that it does not necessarily represent a single physical connection like a TCP socket connection. The underlying physical connection is represented by a `channel multiplexer`.

  An example for opening a channel on an `IConnector` and sending an `IBuffer`:

       // Open a channel
       IChannel channel = connector.openChannel();
       short channelID = channel.getIndex();

       // Fill a buffer
       Buffer buffer = bufferProvider.getBuffer();
       ByteBuffer byteBuffer = buffer.startPutting(channelID);
       byteBuffer.putDouble(15.47);

       // Let the channel send the buffer without blocking
       channel.sendBuffer(buffer);

  An example for receiving `IBuffer`s from channels on an `IConnector`:

       // Create a receive handler
       final IBufferHandler receiveHandler = new IBufferHandler()
       {
         public void handleBuffer(IBuffer buffer)
         {
           ByteBuffer byteBuffer = buffer.getByteBuffer();
           IOUtil.OUT().println("Received " + byteBuffer.getDouble());
           buffer.release();
         }
       };

       // Set the receive handler to all new channels
       connector.addListener(new ContainerEventAdapter()
       {
         protected void onAdded(IContainer container, Object element)
         {
           IChannel channel = (IChannel)element;
           channel.setReceiveHandler(receiveHandler);
         }
       });

  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/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`

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `short` | `getID()` | Returns the ID of this channel.
    `IChannelMultiplexer` | `getMultiplexer()` | Returns the multiplexer this channel is associated with.
    `long` | `getReceivedBuffers()` | Returns the number of `buffers` that are received from the `multiplexer` of this channel and are passed on to the `receive handler` of this channel.
    `long` | `getReceivedBytes()` | Returns the number of bytes that are received from the `multiplexer` of this channel and are passed on to the `receive handler` of this channel.
    `IBufferHandler` | `getReceiveHandler()` | Returns the `IBufferHandler` that handles buffers received from the peer channel.
    `long` | `getSentBuffers()` | Returns the number of `buffers` that are sent to the `multiplexer` of this channel.
    `long` | `getSentBytes()` | Returns the number of bytes that are sent to the `multiplexer` of this channel.
    `void` | `sendBuffer​(IBuffer buffer)` | Asynchronously sends the given buffer to the receive handler of the peer channel.
    `void` | `setReceiveHandler​(IBufferHandler receiveHandler)` | Sets the `IBufferHandler` to handle buffers received from the peer channel.

    - ### Methods inherited from interface org.eclipse.net4j.util.collection.Closeable

      `close, isClosed`

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

      `handleBuffer`

    - ### 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.net4j.util.security.IUserAware

      `getUserID`

- - ### Method Detail

    - #### getID

          short getID()

      Returns the ID of this channel. The ID is unique at any time among all channels of the associated `multiplexer`.
      Since:
        2.0

    - #### getMultiplexer

          IChannelMultiplexer getMultiplexer()

      Returns the multiplexer this channel is associated with. This channel multiplexer can be used, for example, to open additional channels that will be multiplexed through the same transport medium.
      Since:
        2.0

    - #### sendBuffer

          void sendBuffer​(IBuffer buffer)

      Asynchronously sends the given buffer to the receive handler of the peer channel.

    - #### getReceiveHandler

          IBufferHandler getReceiveHandler()

      Returns the `IBufferHandler` that handles buffers received from the peer channel.

    - #### setReceiveHandler

          void setReceiveHandler​(IBufferHandler receiveHandler)

      Sets the `IBufferHandler` to handle buffers received from the peer channel.

    - #### getSentBuffers

          long getSentBuffers()

      Returns the number of `buffers` that are sent to the `multiplexer` of this channel.
      Since:
        4.10

    - #### getSentBytes

          long getSentBytes()

      Returns the number of bytes that are sent to the `multiplexer` of this channel.
      Since:
        4.13

    - #### getReceivedBuffers

          long getReceivedBuffers()

      Returns the number of `buffers` that are received from the `multiplexer` of this channel and are passed on to the `receive handler` of this channel.
      Since:
        4.10

    - #### getReceivedBytes

          long getReceivedBytes()

      Returns the number of bytes that are received from the `multiplexer` of this channel and are passed on to the `receive handler` of this channel.
      Since:
        4.13