replaceWriteLogMessageEx function

void replaceWriteLogMessageEx({
  1. LogCallbackExFunction? callback,
})

Implementation

void replaceWriteLogMessageEx({LogCallbackExFunction? callback}) {
  if (callback == null) {
    cvRun(() => ccore.replaceWriteLogMessageEx(ffi.nullptr));
    _logCallbackEx?.close();
    _logCallbackEx = null;
  } else {
    void cCallback(
      int logLevel,
      ffi.Pointer<ffi.Char> tag,
      int tagLen,
      ffi.Pointer<ffi.Char> file,
      int fileLen,
      int line,
      ffi.Pointer<ffi.Char> func,
      int funcLen,
      ffi.Pointer<ffi.Char> message,
      int msgLen,
    ) {
      final tagStr = tag.cast<Utf8>().toDartString(length: tagLen);
      final fileStr = file.cast<Utf8>().toDartString(length: fileLen);
      final funcStr = func.cast<Utf8>().toDartString(length: funcLen);
      final messageStr = message.cast<Utf8>().toDartString(length: msgLen);
      callback(LogLevel.fromValue(logLevel), tagStr, fileStr, line, funcStr, messageStr);
    }

    final fp = ffi.NativeCallable<cvg.LogCallbackExFunction>.listener(cCallback);
    cvRun(() => ccore.replaceWriteLogMessageEx(fp.nativeFunction));
    _logCallbackEx = fp;
  }
}