connect method
Connects the WebSocket. timeout
is optional.
Implementation
Future<WebSocketChannel?> connect({Duration? timeout}) async {
if (timeout != null) {
var c = Completer<WebSocketChannel>();
late Timer timer;
timer = Timer(timeout, () {
if (!c.isCompleted) {
if (timer.isActive) timer.cancel();
c.completeError(TimeoutException(
'WebSocket connection exceeded timeout of ${timeout.inMilliseconds} ms',
timeout));
}
});
scheduleMicrotask(() {
getConnectedWebSocket().then((socket) {
if (!c.isCompleted) {
if (timer.isActive) timer.cancel();
while (_queue.isNotEmpty) {
var action = _queue.removeFirst();
socket.sink.add(serialize(action));
}
c.complete(socket);
}
}).catchError((e, StackTrace st) {
if (!c.isCompleted) {
if (timer.isActive) {
timer.cancel();
}
// TODO: Re-evaluate this error
var obj = 'Error';
c.completeError(obj, st);
}
});
});
return await c.future.then((socket) {
_socket = socket;
listen();
return _socket;
});
} else {
_socket = await getConnectedWebSocket();
listen();
return _socket;
}
}