initialize method

Future<bool> initialize(
  1. String url, {
  2. bool retry = true,
})

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