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((Event e) {
if (!completer.isCompleted) {
return completer.completeError(
e.isA<ErrorEvent>() ? (e as ErrorEvent).message : e,
);
}
});
return completer.future;
}