예제 #1
0
파일: Form1.cs 프로젝트: gewebber/PI-AF-SDK
        private void btnPing_Click(object sender, EventArgs e)
        {
            int index = 0;
            List<long> results = new List<long>();

            //Hide all data points
            pingResults.Series["ping"].Points.Clear();
            pingResults.Visible = false;
            lbPingFailure.Text = "";
            lbReturnTime.Visible = false;
            lbAverageReturnTime.Visible = false;
            lbMinReturnTime.Visible = false;
            lbMinTime.Visible = false;
            lbMaxReturnTime.Visible = false;
            lbMaxTime.Visible = false;
            lbConnectionStatus.Visible = false;
            lbConnectionStatusLabel.Visible = false;
            lbAuthenticationStatus.Visible = false;
            lbAuthenticationStatusLabel.Visible = false;

            int timeout = 1000;

            do
            {
               
                try
                {
                    //Ping server selected in drop-down box
                    Ping pinger = new Ping();
                    System.Threading.Thread.Sleep(50);
                    PingReply reply = pinger.Send(piServerPicker2.Text.ToString(), timeout);
                    
                    //if successful, and round trip time to array and chart 
                    if (reply.Status == IPStatus.Success) 
                    {
                        long speed = reply.RoundtripTime;
                        pingResults.Visible = true;
                        pingResults.Series["ping"].Points.AddY(speed);
                        results.Add(speed);
                    }
                    else
                    {
                        //If timeout occurs, display message and exit loop
                        pingResults.Visible = false;
                        lbPingFailure.Text = "Ping Timeout!";
                        break;
                    }
                    pinger.Dispose();
                    index++;

                }
                catch (PingException)//Catch any exceptions and continue with loop
                {
                    continue;
                }
                
            } while (index < 20);

            //Make information items visible
            lbAuthenticationStatus.Visible = true;
            lbAuthenticationStatusLabel.Visible = true;
            lbConnectionStatus.Visible = true;
            lbConnectionStatusLabel.Visible = true;

            //Set information item values depending on ping results
            if (lbPingFailure.Text.Equals("Ping Timeout!"))
            {
                lbAuthenticationStatus.Text = " - ";
                lbConnectionStatus.Text = " - ";
            }
            else
            {
                long pingAverage = (long)results.Average();
                lbAverageReturnTime.Text = pingAverage.ToString() + " ms";
                lbReturnTime.Visible = true;
                lbAverageReturnTime.Visible = true;

                long pingMax = (long)results.Max();
                lbMaxReturnTime.Text = pingMax.ToString() + " ms";
                lbMaxReturnTime.Visible = true;
                lbMaxTime.Visible = true;

                long pingMin = (long)results.Min();
                lbMinReturnTime.Text = pingMin.ToString() + " ms";
                lbMinReturnTime.Visible = true;
                lbMinTime.Visible = true;

                PIServers servers = new PIServers();
                PIServer server = servers[piServerPicker2.PIServer.ToString()];

                //Attempt to connect to server
                try
                {
                    //If sucessful and both 'connection' and 'authentication' information items display this success
                    server.Connect();
                    lbAuthenticationStatus.Text = "Authentication successful";
                    lbConnectionStatus.Text = "Connection successful";
                } catch (OSIsoft.AF.PI.PIAuthenticationException)
                {
                    //If authentication exception occurs, display this
                    lbAuthenticationStatus.Text = "Authentication unsuccessful";
                    lbConnectionStatus.Text = " - ";
                } catch (Exception ex)
                {
                    //If any other exception then unsuccessful connection
                    lbAuthenticationStatus.Text = " - ";
                    lbConnectionStatus.Text = "Connection unsuccessful";

                }
                
                
            }

        }