nativeCall<T extends GeneratedMessage> static method
T
nativeCall<T extends GeneratedMessage>(
- Function nativeFunction,
- GeneratedMessage request,
- T response
Implementation
static T nativeCall<T extends $pb.GeneratedMessage>(
Function nativeFunction, $pb.GeneratedMessage request, T response) {
final requestBufferPtr = createRequestBuffer(request);
final responseBufferPtr =
calloc<OkapiByteBuffer>(sizeOf<OkapiByteBuffer>());
final err = calloc<ExternError>(sizeOf<ExternError>());
nativeFunction(requestBufferPtr.ref, responseBufferPtr, err);
final errCode = err.ref.code;
if (errCode != 0) {
final errString = err.ref.message.toDartString();
throw Exception("Okapi native error code=$errCode, message=$errString");
}
response.mergeFromBuffer(
responseBufferPtr.ref.data.asTypedList(responseBufferPtr.ref.len));
// Free native and managed memory
freeNativeMemory(requestBufferPtr, okapiByteBufferFree, responseBufferPtr);
return response;
}