org.glassfish.jersey.server

## Class Broadcaster<T>

- java.lang.Object
- - org.glassfish.jersey.server.Broadcaster<T>

Type Parameters:
  `T` - broadcast type.

All Implemented Interfaces:
  BroadcasterListener<T>

    public class Broadcaster<T>
    extends Object
    implements BroadcasterListener<T>

Used for broadcasting response chunks to multiple `ChunkedOutput` instances.

Author:
  Pavel Bucek, Martin Matula

### Constructor Summary

Constructors
`` `Broadcaster()` Creates a new instance.
`protected` `Broadcaster(Class<? extends Broadcaster> subclass)` Can be used by subclasses to override the default functionality of adding self to the set of `listeners`.

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `add(BroadcasterListener<T> listener)` Register `BroadcasterListener` for `Broadcaster` events listening.
`<OUT extends ChunkedOutput<T>> boolean` `add(OUT chunkedOutput)` Register `ChunkedOutput` to this `Broadcaster` instance.
`void` `broadcast(T chunk)` Broadcast a chunk to all registered `ChunkedOutput` instances.
`void` `closeAll()` Close all registered `ChunkedOutput` instances.
`void` `onClose(ChunkedOutput<T> chunkedOutput)` Called when the chunkedOutput has been closed (either by client closing the connection or by calling `ChunkedOutput.close()` on the server side.
`void` `onException(ChunkedOutput<T> chunkedOutput, Exception exception)` Called when exception was thrown by a given chunked response when trying to write to it or close it.
`boolean` `remove(BroadcasterListener<T> listener)` Un-register `BroadcasterListener`.
`<OUT extends ChunkedOutput<T>> boolean` `remove(OUT chunkedOutput)` Un-register `ChunkedOutput` from this `Broadcaster` instance.

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

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

### Constructor Detail

#### Broadcaster

    public Broadcaster()

Creates a new instance. If this constructor is called by a subclass, it assumes the the reason for the subclass to exist is to implement `onClose(ChunkedOutput)` and `onException(ChunkedOutput, Exception)` methods, so it adds the newly created instance as the listener. To avoid this, subclasses may call `Broadcaster(Class)` passing their class as an argument.

#### Broadcaster

    protected Broadcaster(Class<? extends Broadcaster> subclass)

Can be used by subclasses to override the default functionality of adding self to the set of `listeners`. If creating a direct instance of a subclass passed in the parameter, the broadcaster will not register itself as a listener.

Parameters:
  `subclass` - subclass of Broadcaster that should not be registered as a listener - if creating a direct instance of this subclass, this constructor will not register the new instance as a listener.
See Also:
  `Broadcaster()`

### Method Detail

#### add

    public <OUT extends ChunkedOutput<T>> boolean add(OUT chunkedOutput)

Register `ChunkedOutput` to this `Broadcaster` instance.

Parameters:
  `chunkedOutput` - `ChunkedOutput` to register.
Returns:
  `true` if the instance was successfully registered, `false` otherwise.

#### remove

    public <OUT extends ChunkedOutput<T>> boolean remove(OUT chunkedOutput)

Un-register `ChunkedOutput` from this `Broadcaster` instance. This method does not close the `ChunkedOutput` being unregistered.

Parameters:
  `chunkedOutput` - `ChunkedOutput` instance to un-register from this broadcaster.
Returns:
  `true` if the instance was unregistered, `false` otherwise.

#### add

    public boolean add(BroadcasterListener<T> listener)

Register `BroadcasterListener` for `Broadcaster` events listening.

This operation is potentially slow, especially if large number of listeners get registered in the broadcaster. The `Broadcaster` implementation is optimized to efficiently handle small amounts of concurrent listener registrations and removals and large amounts of registered listener notifications.

Parameters:
  `listener` - listener to be registered.
Returns:
  `true` if registered, `false` otherwise.

#### remove

    public boolean remove(BroadcasterListener<T> listener)

Un-register `BroadcasterListener`.

This operation is potentially slow, especially if large number of listeners get registered in the broadcaster. The `Broadcaster` implementation is optimized to efficiently handle small amounts of concurrent listener registrations and removals and large amounts of registered listener notifications.

Parameters:
  `listener` - listener to be unregistered.
Returns:
  `true` if unregistered, `false` otherwise.

#### broadcast

    public void broadcast(T chunk)

Broadcast a chunk to all registered `ChunkedOutput` instances.

Parameters:
  `chunk` - chunk to be sent.

#### closeAll

    public void closeAll()

Close all registered `ChunkedOutput` instances.

#### onException

    public void onException(ChunkedOutput<T> chunkedOutput,
                            Exception exception)

Called when exception was thrown by a given chunked response when trying to write to it or close it. Can be implemented by subclasses to handle the event of exception thrown from a particular `ChunkedOutput` instance when trying to write to it or close it.

Specified by:
  `onException` in interface `BroadcasterListener<T>`
Parameters:
  `chunkedOutput` - instance that threw exception.
  `exception` - exception that was thrown.

#### onClose

    public void onClose(ChunkedOutput<T> chunkedOutput)

Called when the chunkedOutput has been closed (either by client closing the connection or by calling `ChunkedOutput.close()` on the server side. Can be implemented by subclasses to handle the event of `ChunkedOutput` being closed.

Specified by:
  `onClose` in interface `BroadcasterListener<T>`
Parameters:
  `chunkedOutput` - instance that was closed.