establishConnection method

  1. @override
void establishConnection({
  1. bool forceConnection = false,
  2. int numberOfRetries = 3,
  3. String? forceAccessToken,
  4. Function? callbackConnected,
})
override

Implementation

@override
void establishConnection({
  bool forceConnection = false,
  int numberOfRetries = 3,
  String? forceAccessToken,
  Function? callbackConnected,
}) {
  unloadHandler(() {
    _socket?.disconnect();
    _socket = null;
  });

  if (_authLocal.accessToken.isEmpty ||
      (_socket != null && !forceConnection)) {
    return;
  }

  disconnection();

  final String mAccessToken = forceAccessToken ?? _authLocal.accessToken;

  final options = OptionBuilder()
      .setTransports(kIsWeb ? ['polling'] : ['websocket'])
      .enableReconnection()
      .enableForceNew()
      .setParser(
        ParserOptions(
          encoder: () => MsgPackEncoder(),
          decoder: () => MsgPackDecoder(),
        ),
      )
      .setExtraHeaders(
    {
      'Authorization': 'Bearer $mAccessToken',
    },
  ).build();

  _socket = io(WaterbusSdk.serverConfig.url, options);

  _socket?.connect();

  _socket?.onError((data) async {
    if (_authLocal.accessToken.isEmpty || numberOfRetries == 0) return;

    final (String newAccessToken, _) = await _dioConfig.onRefreshToken(
      oldAccessToken: mAccessToken,
    );

    Future.delayed(1.seconds, () {
      establishConnection(
        forceConnection: true,
        forceAccessToken: newAccessToken,
        numberOfRetries: numberOfRetries - 1,
      );
    });
  });

  _socket?.onConnect((_) async {
    callbackConnected?.call();
    _logger.log('established connection - sid: ${_socket?.id}');

    _listenToRoomEvents();
    _listenToMediaEvents();
    _listenToRenegotiationEvents();
    _listenToChatEvents();
    _listenToSystemEvents();
  });
}