/// <summary> /// Discover new onvif devices on the network passing a callback /// to retrieve devices as they reply /// </summary> /// <param name="timeout">A timeout in seconds to wait for onvif devices</param> /// <param name="onDeviceDiscovered">A method that is called each time a new device replies.</param> /// <param name="cancellationToken">A cancellation token</param> /// <returns>The Task to be awaited</returns> public async Task Discover(int timeout, Action <DiscoveryDevice> onDeviceDiscovered, CancellationToken cancellationToken = default) { var clients = clientFactory.CreateClientForeachInterface(); if (!clients.Any()) { throw new DiscoveryException("Missing valid NetworkInterfaces, UdpClients could not be created"); } var discoveries = clients.Select(client => Discover(timeout, client, onDeviceDiscovered, cancellationToken)).ToArray(); await Task.WhenAll(discoveries); }
/// <summary> /// Discover new onvif devices on the network /// </summary> /// <param name="timeout">A timeout in seconds to wait for onvif devices</param> /// <param name="cancellationToken">A cancellation token</param> /// <returns>a list of <see cref="DiscoveryDevice"/></returns> public async Task <IEnumerable <DiscoveryDevice> > Discover(int timeout, CancellationToken cancellationToken = default) { var devices = new List <DiscoveryDevice> (); List <Task <IEnumerable <DiscoveryDevice> > > discoveries = new List <Task <IEnumerable <DiscoveryDevice> > > (); var clients = clientFactory.CreateClientForeachInterface(); if (!clients.Any()) { throw new DiscoveryException("Missing valid NetworkInterfaces, UdpClients could not be created"); } foreach (var client in clients) { discoveries.Add(Discover(timeout, client, cancellationToken)); } var discoverResults = await Task.WhenAll(discoveries); foreach (var results in discoverResults) { devices.AddRange(results); } return(devices); }