# Interface ChannelSender

All Superinterfaces:
  `Heartbeat`

All Known Implementing Classes:
  `ReplicationTransmitter`

public interface ChannelSender extends Heartbeat
The `ChannelSender` interface is the data sender component at the bottom layer, the IO layer (for layers see the `Channel` interface). The channel sender must support "silent" members, i.e., be able to send a message to a member that is not in the membership, but is part of the destination parameter

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `add(Member member)`
  Notify the sender of a member being added to the group.
  Optional.
  `Channel`
  `getChannel()`
  Return the channel that is related to this ChannelSender
  `void`
  `heartbeat()`
  A channel heartbeat, use this method to clean up resources
  `void`
  `remove(Member member)`
  Notification that a member has been removed or crashed.
  `void`
  `sendMessage(ChannelMessage message, Member[] destination)`
  Send a message to one or more recipients.
  `void`
  `setChannel(Channel channel)`
  Set the channel that is related to this ChannelSender
  `void`
  `start()`
  Start the channel sender
  `void`
  `stop()`
  Stop the channel sender

- ## Method Details

  - ### add

    void add(Member member)
    Notify the sender of a member being added to the group.
    Optional. This can be an empty implementation, that does nothing
    Parameters:
      `member` - Member

  - ### remove

    void remove(Member member)
    Notification that a member has been removed or crashed. Can be used to clean up open connections etc
    Parameters:
      `member` - Member

  - ### start

    void start() throws IOException
    Start the channel sender
    Throws:
      `IOException` - if preprocessing takes place and an error happens

  - ### stop

    void stop()
    Stop the channel sender

  - ### heartbeat

    void heartbeat()
    A channel heartbeat, use this method to clean up resources
    Specified by:
      `heartbeat` in interface `Heartbeat`

  - ### sendMessage

    void sendMessage(ChannelMessage message, Member[] destination) throws ChannelException
    Send a message to one or more recipients.
    Parameters:
      `message` - ChannelMessage - the message to be sent
      `destination` - Member[] - the destinations
    Throws:
      `ChannelException` - - if an error happens, the ChannelSender MUST report individual send failures on a per member basis, using ChannelException.addFaultyMember
    See Also:
      - `ChannelException.addFaultyMember(Member,java.lang.Exception)`

  - ### getChannel

    Channel getChannel()
    Return the channel that is related to this ChannelSender
    Returns:
      Channel

  - ### setChannel

    void setChannel(Channel channel)
    Set the channel that is related to this ChannelSender
    Parameters:
      `channel` - The channel