MulticastProbe.windows constructor
Constructor for Windows OS builds, we need the kReleaseMode
flag from
Flutter to determine if we are running in debug or release mode so that
the appropriate path to the discovery.dll
file can be used. The default
assumes the application is running as a cli
app and will look for the
DLL in the same folder as the executable. For cli
the path to the DLL
can be overwritten with the ONVIF_DISCOVERY_DLL
environment variable.
Implementation
MulticastProbe.windows({int? timeout, bool? releaseMode}) {
final env = Platform.environment;
var discoveryDllPath = env.containsKey('ONVIF_DISCOVERY_DLL')
? env['ONVIF_DISCOVERY_DLL']!
: join(Directory.current.path, 'bin', 'discovery.dll');
if (releaseMode != null) {
discoveryDllPath =
join(Directory.current.path, 'assets', 'discovery.dll');
if (releaseMode) {
final String localLib =
join('data', 'flutter_assets', 'assets', 'discovery.dll');
discoveryDllPath =
join(Directory(Platform.resolvedExecutable).parent.path, localLib);
}
}
final Pointer<T> Function<T extends NativeType>(String symbolName) lookup =
() {
return DynamicLibrary.open(discoveryDllPath).lookup;
}();
final discoveryPtr = lookup<
NativeFunction<
Int32 Function(
Pointer<NativeType>,
Pointer<NativeType>,
Int32,
)>>('discovery');
_discovery = discoveryPtr.asFunction<
int Function(
Pointer<NativeType>,
Pointer<NativeType>,
int,
)>();
probeTimeout = timeout ?? defaultTimeout;
}