public NatNetServerDiscovery(IEnumerable <string> knownServerAddresses = null) { m_nativeCallbackHandler = ServerDiscoveredNativeThunk; if (knownServerAddresses == null) { NatNetError result = NatNetLib.NativeMethods.NatNet_CreateAsyncServerDiscovery(out m_discoveryHandle, m_nativeCallbackHandler); NatNetException.ThrowIfNotOK(result, "NatNet_CreateAsyncServerDiscovery failed."); if (m_discoveryHandle == IntPtr.Zero) { throw new NatNetException("NatNet_CreateAsyncServerDiscovery returned null handle."); } } else { NatNetError result = NatNetLib.NativeMethods.NatNet_CreateAsyncServerDiscovery(out m_discoveryHandle, m_nativeCallbackHandler, IntPtr.Zero, false); NatNetException.ThrowIfNotOK(result, "NatNet_CreateAsyncServerDiscovery failed."); foreach (string serverAddress in knownServerAddresses) { result = NatNetLib.NativeMethods.NatNet_AddDirectServerToAsyncDiscovery(m_discoveryHandle, serverAddress); NatNetException.ThrowIfNotOK(result, "NatNet_AddDirectServerToAsyncDiscovery failed."); } result = NatNetLib.NativeMethods.NatNet_StartAsyncDiscovery(m_discoveryHandle); NatNetException.ThrowIfNotOK(result, "NatNet_StartAsyncDiscovery failed."); } }
public static extern NatNetError NatNet_CreateAsyncServerDiscovery(out IntPtr discoveryHandle, NatNetServerDiscoveryCallback pfnCallback, IntPtr pUserContext = default(IntPtr), [MarshalAs(UnmanagedType.U1)] bool startImmediately = true);