getConnectedWebSocket method

  1. @override
Future<WebSocketChannel> getConnectedWebSocket()
override

Returns a new WebSocketChannel, ready to be listened on.

This should be overriden by child classes, NOT connect.

Implementation

@override
Future<WebSocketChannel> getConnectedWebSocket() {
  var url = websocketUri;

  if (authToken?.isNotEmpty == true) {
    url = url.replace(
        queryParameters: Map<String, String?>.from(url.queryParameters)
          ..['token'] = authToken);
  }

  var socket = WebSocket(url.toString());
  var completer = Completer<WebSocketChannel>();

  socket
    ..onOpen.listen((_) {
      if (!completer.isCompleted) {
        return completer.complete(HtmlWebSocketChannel(socket));
      }
    })
    ..onError.listen((e) {
      if (!completer.isCompleted) {
        return completer.completeError(e is ErrorEvent ? e.error! : e);
      }
    });

  return completer.future;
}