# WebSocket class

A two-way HTTP communication object for client or server applications.

The stream exposes the messages received. A text message will be of type `String` and a binary message will be of type `List<int>`.

Implements
  - Stream
  - StreamSink

## Constructors

WebSocket()
WebSocket.fromUpgradedSocket(Socket socket, { String protocol, bool serverSide, CompressionOptions compression: CompressionOptions.compressionDefault })
  Creates a WebSocket from an already-upgraded socket. [...]
  factory

## Properties

closeCode → int
  The close code set when the WebSocket connection is closed. If there is no close code available this property will be `null`
  read-only
closeReason → String
  The close reason set when the WebSocket connection is closed. If there is no close reason available this property will be `null`
  read-only
extensions → String
  The extensions property is initially the empty string. After the WebSocket connection is established this string reflects the extensions used by the server.
  read-only
pingInterval ↔ Duration
  Set and get the interval for sending ping signals. If a ping message is not answered by a pong message from the peer, the `WebSocket` is assumed disconnected and the connection is closed with a `WebSocketStatus.GOING_AWAY` close code. When a ping signal is sent, the pong message must be received within `pingInterval`. [...]
  read / write
protocol → String
  The protocol property is initially the empty string. After the WebSocket connection is established the value is the subprotocol selected by the server. If no subprotocol is negotiated the value will remain `null`.
  read-only
readyState → int
  Returns the current state of the connection.
  read-only
done → Future
  Return a future which is completed when the StreamSink is finished. [...]
  read-only, inherited
first → Future
  The first element of the stream. [...]
  read-only, inherited
hashCode → int
  The hash code for this object. [...]
  read-only, inherited
isBroadcast → bool
  Whether this stream is a broadcast stream.
  read-only, inherited
isEmpty → Future<bool>
  Whether this stream contains any elements. [...]
  read-only, inherited
last → Future
  The last element of this stream. [...]
  read-only, inherited
length → Future<int>
  The number of elements in this stream. [...]
  read-only, inherited
runtimeType → Type
  A representation of the runtime type of the object.
  read-only, inherited
single → Future
  The single element of this stream. [...]
  read-only, inherited

## Methods

add(dynamic data) → void
  Sends data on the WebSocket connection. The data in `data` must be either a `String`, or a `List<int>` holding bytes.
addStream(Stream stream) → Future
  Sends data from a stream on WebSocket connection. Each data event from `stream` will be send as a single WebSocket frame. The data from `stream` must be either `String`s, or `List<int>`s holding bytes.
addUtf8Text(List<int> bytes) → void
  Sends a text message with the text represented by `bytes`. [...]
close([int code, String reason ]) → Future
  Closes the WebSocket connection. Set the optional `code` and `reason` arguments to send close information to the remote peer. If they are omitted, the peer will see WebSocketStatus.NO_STATUS_RECEIVED code with no reason.
addError(Object error, [ StackTrace stackTrace ]) → void
  Adds an `error` to the sink. [...]
  inherited
any(bool test(T element)) → Future<bool>
  Checks whether `test` accepts any element provided by this stream. [...]
  inherited
asBroadcastStream({void onListen(StreamSubscription<T> subscription), void onCancel(StreamSubscription<T> subscription) }) → Stream
  Returns a multi-subscription stream that produces the same events as this. [...]
  inherited
asyncExpand<E>(Stream<E> convert(T event)) → Stream<E>
  Transforms each element into a sequence of asynchronous events. [...]
  inherited
asyncMap<E>(FutureOr<E> convert(T event)) → Stream<E>
  Creates a new stream with each data event of this stream asynchronously mapped to a new event. [...]
  inherited
cast<R>() → Stream<R>
  Adapt this stream to be a `Stream<R>`. [...]
  inherited
contains(Object needle) → Future<bool>
  Returns whether `needle` occurs in the elements provided by this stream. [...]
  inherited
distinct([bool equals(T previous, T next) ]) → Stream
  Skips data events if they are equal to the previous data event. [...]
  inherited
drain<E>([E futureValue ]) → Future<E>
  Discards all data on the stream, but signals when it's done or an error occurred. [...]
  inherited
elementAt(int index) → Future
  Returns the value of the `index`th data event of this stream. [...]
  inherited
every(bool test(T element)) → Future<bool>
  Checks whether `test` accepts all elements provided by this stream. [...]
  inherited
expand<S>(Iterable<S> convert(T element)) → Stream<S>
  Transforms each element of this stream into a sequence of elements. [...]
  inherited
firstWhere(bool test(T element), { dynamic orElse() }) → Future
  Finds the first element of this stream matching `test`. [...]
  inherited
fold<S>(S initialValue, S combine(S previous, T element)) → Future<S>
  Combines a sequence of values by repeatedly applying `combine`. [...]
  inherited
forEach(void action(T element)) → Future
  Executes `action` on each element of the stream. [...]
  inherited
handleError(Function onError, { bool test(dynamic error) }) → Stream
  Creates a wrapper Stream that intercepts some errors from this stream. [...]
  inherited
join([String separator = "" ]) → Future<String>
  Combines the string representation of elements into a single string. [...]
  inherited
lastWhere(bool test(T element), { dynamic orElse() }) → Future
  Finds the last element in this stream matching `test`. [...]
  inherited
listen(void onData(T event), { Function onError, void onDone(), bool cancelOnError }) → StreamSubscription
  Adds a subscription to this stream. [...]
  inherited
map<S>(S convert(T event)) → Stream<S>
  Transforms each element of this stream into a new stream event. [...]
  inherited
noSuchMethod(Invocation invocation) → dynamic
  Invoked when a non-existent method or property is accessed. [...]
  inherited
pipe(StreamConsumer streamConsumer) → Future
  Pipes the events of this stream into `streamConsumer`. [...]
  inherited
reduce(dynamic combine(T previous, T element)) → Future
  Combines a sequence of values by repeatedly applying `combine`. [...]
  inherited
singleWhere(bool test(T element), { dynamic orElse() }) → Future
  Finds the single element in this stream matching `test`. [...]
  inherited
skip(int count) → Stream
  Skips the first `count` data events from this stream. [...]
  inherited
skipWhile(bool test(T element)) → Stream
  Skip data events from this stream while they are matched by `test`. [...]
  inherited
take(int count) → Stream
  Provides at most the first `count` data events of this stream. [...]
  inherited
takeWhile(bool test(T element)) → Stream
  Forwards data events while `test` is successful. [...]
  inherited
timeout(Duration timeLimit, { void onTimeout(EventSink<T> sink) }) → Stream
  Creates a new stream with the same events as this stream. [...]
  inherited
toList() → Future<List>
  Collects all elements of this stream in a List. [...]
  inherited
toSet() → Future<Set>
  Collects the data of this stream in a Set. [...]
  inherited
toString() → String
  Returns a string representation of this object.
  inherited
transform<S>(StreamTransformer<dynamic, S> streamTransformer) → Stream<S>
  Applies a StreamTransformer to the current stream. [...]
  inherited
where(bool test(T event)) → Stream
  Creates a new stream from this stream that discards some elements. [...]
  inherited

## Operators

operator ==(dynamic other) → bool
  The equality operator. [...]
  inherited

## Static Properties

userAgent ↔ String
  Gets the user agent used for WebSocket connections.
  read / write

## Static Methods

connect(String url, { Iterable<String> protocols, Map<String, dynamic> headers, CompressionOptions compression: CompressionOptions.compressionDefault }) → Future<WebSocket>
  Create a new WebSocket connection. The URL supplied in `url` must use the scheme `ws` or `wss`. [...]

## Constants

CLOSED → const int
  @Deprecated("Use closed instead")
  `closed`
closed → const int
  `3`
CLOSING → const int
  @Deprecated("Use closing instead")
  `closing`
closing → const int
  `2`
CONNECTING → const int
  @Deprecated("Use connecting instead")
  `connecting`
connecting → const int
  Possible states of the connection.
  `0`
OPEN → const int
  @Deprecated("Use open instead")
  `open`
open → const int
  `1`