/// <summary> /// This is the 'nuts and bolts' method that queries the server. /// </summary> /// <returns>A QueryServerResults instance that holds the results of the query.</returns> private QueryServerCompletedEventArgs QueryServer() { QueryServerCompletedEventArgs result = new QueryServerCompletedEventArgs(); Initialize(); UdpClient client = null; try { // Configure and connect the socket. client = new UdpClient(); IPEndPoint ipEndPoint = RemoteSNTPServer.GetIPEndPoint(); client.Client.SendTimeout = Timeout; client.Client.ReceiveTimeout = Timeout; client.Connect(ipEndPoint); // Send and receive the data, and save the completion DateTime. SNTPData request = SNTPData.GetClientRequestPacket(VersionNumber); client.Send(request, request.Length); result.Data = client.Receive(ref ipEndPoint); result.Data.DestinationDateTime = DateTime.Now.ToUniversalTime(); // Check the data if (result.Data.Mode == Mode.Server) { result.Succeeded = true; // Call other method(s) if needed if (UpdateLocalDateTime) { UpdateTime(result.Data.LocalClockOffset); result.LocalDateTimeUpdated = true; } } else { result.ErrorData = new ErrorData("The response from the server was invalid."); } return result; } catch (Exception ex) { result.ErrorData = new ErrorData(ex); return result; } finally { // Close the socket if (client != null) client.Close(); } }
// Protected Methods /// <summary> /// Raises the QueryServerCompleted event. /// </summary> /// <param name="e">A QueryServerCompletedEventArgs instance.</param> protected virtual void OnQueryServerCompleted(QueryServerCompletedEventArgs e) { EventHandler<QueryServerCompletedEventArgs> eh = QueryServerCompleted; if (eh != null) eh(this, e); }