getConnectedWebSocket method
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;
}