initialize method
Implementation
Future<bool> initialize(String url, {bool retry = true}) async {
this.url = url;
logger.info('Initializing websocket connection ...');
_websocketIntendedState = WebsocketStatus.connecting;
do {
var ws = WebSocket.connect(url).timeout(Duration(seconds: 5));
try {
var wsConnection = await ws;
logger.info('Websocket connection successfully established');
// check connection health each 5 seconds
wsConnection.pingInterval = Duration(seconds: 5);
var wsStream = jsonDocument
.bind(IOWebSocketChannel(wsConnection).cast<String>())
.transformStream(ignoreFormatExceptions);
var stream = wsStream.stream.asBroadcastStream();
_wsResponseBroadcaster = stream.cast<Map<String, dynamic>?>();
_wsRpc2Client =
jsonrpc2.Client.withoutJson(StreamChannel.withGuarantees(
stream,
wsStream.sink,
));
_websocketIntendedState = WebsocketStatus.running;
_wsRpc2Client!.listen().then((_) {
restart();
});
_onConnectionCallbacks
.forEach((callback) => callback(_wsResponseBroadcaster!));
if (_lastRestartedEvent != null && !_lastRestartedEvent!) {
restartedStreamController.sink.add(true);
}
return true;
} on TimeoutException {
continue;
} on SocketException {
_lastRestartedEvent = false;
if (retry == true) {
await Future.delayed(Duration(seconds: 5));
}
}
} while (retry);
return false;
}