startAsync method

Future<void> startAsync(
  1. String uuid,
  2. String jsonConfig, {
  3. Map<String, String> env = const {},
})

Implementation

Future<void> startAsync(
  String uuid,
  String jsonConfig, {
  Map<String, String> env = const {},
}) async {
  final uuidPtr = StringUtf8Pointer(uuid).toNativeUtf8();
  final cfgPtr = StringUtf8Pointer(jsonConfig).toNativeUtf8();
  final start = _startPtr.asFunction<_StartDart>();
  final setEnv = _setEnvPtr.asFunction<_SetEnvDart>();
  final freeMemory = _freeMemoryPtr.asFunction<_FreeMemoryDart>();

  try {
    _getTransferMessage(
      await Isolate.run(() {
        for (final entry in env.entries) {
          final keyPtr = entry.key.toNativeUtf8();
          final valuePtr = entry.value.toNativeUtf8();

          try {
            _parseTransferWithFree(
              setEnv(keyPtr, valuePtr),
              freeMemory,
              throwOnError: true,
            );
          } finally {
            calloc.free(keyPtr);
            calloc.free(valuePtr);
          }
        }

        return start(uuidPtr, cfgPtr);
      }),
    );
  } finally {
    calloc.free(uuidPtr);
    calloc.free(cfgPtr);
  }
}