예제 #1
0
        public PingSettings GetCurrentPingSettings()
        {
            var result = new PingSettings
            {
                CanPingUntilStopped = this.CanPingUntilStopped,
                CanPingIpV4         = this.CanPingIpV4,
                CanPingIpV6         = this.CanPingIpV6,
                CanPingHyperV       = this.CanPingHyperV,
                RequestNumber       = this.RequestNumber,
                BufferLength        = this.BufferLength,
                Ttl     = this.Ttl,
                TimeOut = this.TimeOut
            };

            return(result);
        }
예제 #2
0
        private async Task UntilStoppedPingAsync(PingModel pingModel, PingSettings setting, CancellationToken token)
        {
            while (pingModel.IsWorking)
            {
                try
                {
                    var newPing = await this.EchoRequestAsync(setting.Host, setting.BufferLength, setting.Ttl, setting.TimeOut, token);

                    pingModel.Add(newPing);
                    await Task.Delay(500);
                }
                catch (OperationCanceledException)
                {
                    break;
                }
            }
        }
예제 #3
0
        private async Task CountPingAsync(PingModel ping, PingSettings setting, CancellationToken token)
        {
            for (int i = 0; i < setting.RequestNumber && ping.IsWorking; i++)
            {
                try
                {
                    var newPing = await this.EchoRequestAsync(setting.Host, setting.BufferLength, setting.Ttl, setting.TimeOut, token);

                    ping.Add(newPing);
                    await Task.Delay(500);
                }
                catch (OperationCanceledException)
                {
                    break;
                }
            }
        }
예제 #4
0
        public async Task PingAsync(PingModel ping, PingSettings setting, CancellationToken token)
        {
            ping.Start();
            var workTimer = Stopwatch.StartNew();

            if (setting.CanPingUntilStopped)
            {
                await this.UntilStoppedPingAsync(ping, setting, token);
            }
            else
            {
                await this.CountPingAsync(ping, setting, token);
            }

            workTimer.Stop();
            ping.TimeStamp = workTimer.ElapsedMilliseconds;
            ping.Finish();
        }
예제 #5
0
        private void pingBtn_Click(object sender, RoutedEventArgs e)
        {
            echoReplies.Items.Clear();

            byte ttl = 0;

            if (!byte.TryParse(pingTtlTxt.Text, out ttl))
            {
                MessageBox.Show("\"" + pingTtlTxt.Text + "\" is not a valid Ttl (Time-to-Live).");
                return;
            }

            ushort bytes = 0;

            if (!ushort.TryParse(pingBytesTxt.Text, out bytes))
            {
                MessageBox.Show("\"" + pingBytesTxt.Text + "\" is not a valid Bytes value.");
                return;
            }

            int repeat = 0;

            if (!int.TryParse(pingRepeatTxt.Text, out repeat))
            {
                MessageBox.Show("\"" + pingRepeatTxt.Text + "\" is not a valid repeat value.");
                return;
            }

            int timeout = 0;

            if (!int.TryParse(pingTimeoutTxt.Text, out timeout))
            {
                MessageBox.Show("\"" + pingTimeoutTxt.Text + "\" is not a valid timeout value.");
                return;
            }

            int delay = 0;

            if (!int.TryParse(pingDelayTxt.Text, out delay))
            {
                MessageBox.Show("\"" + pingDelayTxt.Text + "\" is not a valid delay value.");
                return;
            }

            Client.Icmp.CurrentPings.Clear();
            echoReplies.Items.Clear();

            string val = pingDestinationTxt.Text;

            try
            {
                IPv4Address ip = new IPv4Address(val);
                Task.Run(() =>
                {
                    Client.Icmp.Ping(ip, PingSettings.FromConfig(ttl, bytes, timeout, repeat, delay), (result) =>
                    {
                        AddPingResult(result);
                    });
                });
            }
            catch
            {
                Task.Run(() =>
                {
                    Client.Icmp.Ping(val, PingSettings.FromConfig(ttl, bytes, timeout, repeat, delay), (result) =>
                    {
                        AddPingResult(result);
                    });
                });
            }
        }