Skip to content

Latest commit

 

History

History
32 lines (25 loc) · 1.14 KB

WebSocketCompletion.md

File metadata and controls

32 lines (25 loc) · 1.14 KB

WebSocket: Listening for Completion

The transport.WebSocket class implements both the Stream and StreamSink interfaces - but it's a bit unique because those two interfaces are actually tied to the same connection (the underlying WebSocket).

For this reason, a transport.WebSocket instance only reaches the "done" state when both the outgoing StreamSink and the incoming Stream have been closed and cleaned up (including the underlying WebSocket connection).

You can listen for this "done" event or state just as you would with any other Stream or StreamSink instance.

var uri = Uri.parse('ws://echo.websocket.org');
var webSocket = await transport.WebSocket.connect(uri);

// Using the `Future done` property from the `StreamSink` interface:
webSocket.done.then((_) {
  // Perform cleanup, reopen socket, etc.
});

// Using the `onDone` handler from the `Stream`'s `listen()` method:
webSocket.listen((data) { ... }, onDone: () {
  // Perform cleanup, reopen socket, etc.
});

// Additionally, the `close()` method returns the same `Future` as `done`:
webSocket.close().then((_) {
  // Perform cleanup, reopen socket, etc.
});