示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }