registerCallbacks static method

void registerCallbacks()

Register device callbacks synchronously (Phase 1). Matches Swift: Device.register() in CppBridge.initialize() This registers the C++ callbacks without initializing SharedPreferences or caching device ID (those happen in Phase 2).

Implementation

static void registerCallbacks() {
  if (_callbacksRegistered) {
    _logger.debug('Device callbacks already registered');
    return;
  }

  try {
    final lib = PlatformLoader.loadCommons();

    // Allocate callbacks struct
    _callbacksPtr = calloc<RacDeviceCallbacksStruct>();
    final callbacks = _callbacksPtr!;

    // Set callback function pointers
    callbacks.ref.getDeviceInfo =
        Pointer.fromFunction<RacDeviceGetInfoCallbackNative>(
            _getDeviceInfoCallback);
    callbacks.ref.getDeviceId =
        Pointer.fromFunction<RacDeviceGetIdCallbackNative>(
            _getDeviceIdCallback, _exceptionalReturnNull);
    callbacks.ref.isRegistered =
        Pointer.fromFunction<RacDeviceIsRegisteredCallbackNative>(
            _isRegisteredCallback, _exceptionalReturnInt32);
    callbacks.ref.setRegistered =
        Pointer.fromFunction<RacDeviceSetRegisteredCallbackNative>(
            _setRegisteredCallback);
    callbacks.ref.httpPost =
        Pointer.fromFunction<RacDeviceHttpPostCallbackNative>(
            _httpPostCallback, _exceptionalReturnInt32);
    callbacks.ref.userData = nullptr;

    // Register with C++
    final setCallbacks = lib.lookupFunction<
        Int32 Function(Pointer<RacDeviceCallbacksStruct>),
        int Function(
            Pointer<RacDeviceCallbacksStruct>)>('rac_device_set_callbacks');

    final result = setCallbacks(callbacks);
    if (result != RacResultCode.success) {
      _logger.warning('Failed to set device callbacks', metadata: {
        'error_code': result,
      });
      calloc.free(callbacks);
      _callbacksPtr = null;
      return;
    }

    _callbacksRegistered = true;
    _logger.debug('Device callbacks registered (sync)');
  } catch (e) {
    _logger.debug('registerCallbacks error: $e');
  }
}