Exemple #1
0
 private void CreatePingers(int cnt)
 {
     for (var i = 1; i <= cnt; i++)
     {
         Pingers.Add(new Ping());
     }
 }
Exemple #2
0
        public async Task <List <IPAddress> > SearchAsync()
        {
            CreatePingers(255);

            var po   = new PingOptions(Ttl, true);
            var enc  = new System.Text.ASCIIEncoding();
            var data = enc.GetBytes("abababababababababababababababab");

            var found = new List <IPAddress>();
            var tasks = Pingers.Select((p, o) =>
            {
                return(Task.Factory.StartNew(async() =>
                {
                    lock (_lock)
                    {
                        Instances += 1;
                    }
                    var pingReply = await p.SendPingAsync($"{BaseIp}{o++}", TimeOut, data, po);

                    if (pingReply.Status == IPStatus.Success)
                    {
                        found.Add(pingReply.Address);
                    }
                }));
            })
                        .Cast <Task>()
                        .ToList();

            await Task.WhenAll(tasks);

            DestroyPingers();

            return(found);
        }
        /// <summary>
        /// Releases the memory used by the pingers.
        /// </summary>
        public void Dispose()
        {
            i3d_ping_pingers_destroy(_ptr);

            lock (Pingers)
            {
                Pingers.Remove(_ptr);
            }
        }
Exemple #4
0
        private void DestroyPingers()
        {
            foreach (var p in Pingers)
            {
                p.Dispose();
            }

            Pingers.Clear();
        }
        /// <summary>
        /// Creates a new instance of the <see cref="I3dPingersWrapper"/> class.
        /// Should be disposed.
        /// </summary>
        /// <param name="logCallback">The logging callback.</param>
        public I3dPingersWrapper(Action <I3dLogLevel, string> logCallback, I3dIpList ipList)
        {
            _logCallback = logCallback;

            int code = i3d_ping_pingers_create(out _ptr, ipList.Ptr);

            I3dErrorValidator.Validate(code);

            code = i3d_ping_pingers_set_logger(_ptr, LogCallback, _ptr);
            I3dErrorValidator.Validate(code);

            lock (Pingers)
            {
                Pingers.Add(_ptr, this);
            }
        }