tryConnect method

Future<bool> tryConnect(
  1. DataPayload dataPayload
)

Implementation

Future<bool> tryConnect(
  DataPayload dataPayload,
) async {
  final completer = Completer<bool>();
  if (socket != null) {
    dispose();
  }
  final url = dataPayload.payload.data.socket.url.trim();
  final requestId = dataPayload.payload.data.socket.requestId.trim();

  debugPrint(url);

  if (requestId.isNotEmpty && url.isNotEmpty) {
    debugPrint("opening socket connection");
    final data = OptionBuilder()
        .setTransports(['websocket'])
        .setAuth({"chatcode": requestId})
        .setExtraHeaders({"chatcode": requestId})
        .enableForceNew()
        .enableForceNewConnection()
        .enableReconnection()
        .setReconnectionAttempts(100)
        .disableAutoConnect()
        .build();
    socket = io.io(
      url,
      data,
    );

    socket?.on("error", (data) {
      debugPrint("error $data");
      if (!completer.isCompleted) {
        completer.complete(false);
      }
      dispose();
    });
    socket?.on("connect_error", (data) {
      debugPrint("connect_error $data");
      if (!completer.isCompleted) {
        dispose();
        completer.complete(false);
      }
    });

    socket?.on(
      requestId,
      (data) {
        final result = jsonEncode(data);
        final Map<String, dynamic> json = jsonDecode(result);
        if (json.containsKey("status")) {
          if (json["status"] ==
              ConnectionStatus.connectionReset.value.toString()) {
            dispose();
            sl<NavigationService>().popAll();
            sl<EztoResultService>().onClose(CloseReason.byUser);
          }
        }
        if (json.containsKey("auth_req_id")) {
          dispose();
          sl<ApiService>().sendConnectionStatus(
            status: ConnectionStatus.completed,
            socketUrl: url,
            requestId: requestId,
          );
          sl<EztoResultService>().onResult(
            dataPayload.payload.data.socket.requestId.trim(),
            json["auth_req_id"],
          );
          if (closeImmediatelyOnResult) {
            sl<NavigationService>().popAll();
            sl<EztoResultService>().onClose(CloseReason.transactionCompleted);
          }
        }
      },
    );
    socket?.onConnect((data) {
      debugPrint("connect called");
      if (!completer.isCompleted) {
        completer.complete(true);
      }
    });
    socket?.onDisconnect((data) {
      debugPrint("disconnect called");
      if (!completer.isCompleted) {
        dispose();
        completer.complete(false);
      }
    });
    socket?.connect();
  } else {
    //No hook available, return true
    if (!completer.isCompleted) {
      completer.complete(true);
    }
  }
  return completer.future;
}