Ejemplo n.º 1
0
        /// <summary>
        ///     Initializes a thread and starts pinging the specified server
        ///     Calculates the ping and delta of each ping in ms
        /// </summary>
        public void StartPing(int numberOfPings)
        {
            _isRunning = true;
            _totalTime = 0;

            IAsyncAction _pingAction = ThreadPool.RunAsync(async workItem => {
                var previousPingTime = 0;
                var delta            = 0;
                var pingIteration    = 1;
                while (pingIteration <= numberOfPings && _isRunning)
                {
                    var stopwatch = new Stopwatch();
                    var socket    = new StreamSocket();
                    stopwatch.Start();
                    try
                    {
                        await socket.ConnectAsync(new HostName(_url), "80");
                    } catch (Exception e)
                    {
                        OnThreadFinished(FinishType.ERROR);
                        OnThreadFinished(FinishType.FINISHED);
                        return;
                    }

                    stopwatch.Stop();

                    var ms = (int)stopwatch.ElapsedMilliseconds;

                    // First time there is no delta
                    if (pingIteration > 0)
                    {
                        delta            = Math.Abs(ms - previousPingTime);
                        previousPingTime = ms;
                    }

                    Interlocked.Add(ref _totalTime, ms + delta);

                    HorseProgressEventArgs horseProgressEventArgs = new HorseProgressEventArgs(_totalTime, pingIteration);
                    OnPingReceived(horseProgressEventArgs);

                    Thread.Sleep(1000);
                    pingIteration++;
                }

                if (!_isRunning)
                {
                    OnThreadFinished(FinishType.CANCELED);
                    return;
                }

                OnThreadFinished(FinishType.FINISHED);
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Event triggers whenever a ping is finished
        /// </summary>
        /// <param name="e"></param>
        protected virtual void OnPingReceived(HorseProgressEventArgs e)
        {
            EventHandler <HorseProgressEventArgs> handler = PingReceived;

            handler?.Invoke(this, e);
        }