'  
'   Rebex Sample Code License
' 
'   Copyright 2026, REBEX CR s.r.o.
'   All rights reserved.
'   https://www.rebex.net/
' 
'   Permission to use, copy, modify, and/or distribute this software for any
'   purpose with or without fee is hereby granted.
' 
'   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
'   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
'   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
'   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
'   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
'   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
'   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
'   OTHER DEALINGS IN THE SOFTWARE.
' 

Imports System
Imports Rebex.Net

' This sample asks a time server for time and displays its answer.
Class TimeGetter

    Public Shared Sub Main()
            ' set the trial license key
            Rebex.Licensing.Key = Rebex.Samples.TrialKey.Key


        Dim args() As String = System.Environment.GetCommandLineArgs()

        If args.Length <> 2 Then
            Console.WriteLine("Usage: TimeGetter server.name")
            Console.WriteLine("Example: TimeGetter test.rebex.net")
            Return
        End If

        Dim ntp As Ntp = New Ntp(args(1))

        ' since we want to know the highest version the server supports, we 
        ' must declare the highest ourselves (otherwise it would use compatibility mode)
        ntp.VersionNumber = 4

        Dim response As NtpResponse = ntp.GetTime()
        Dim packet As NtpPacket = response.Packet

        Console.WriteLine( _
            "We sent the request to the server at {0} UTC and received its response at {1} UTC.", _
            packet.OriginateTimestamp, _
            packet.DestinationTimestamp _
        )

        Console.WriteLine( _
            "The server at {0} has stratum {1} and runs NTP version {2}.", _
            args(1), _
            packet.Stratum, _
            packet.VersionNumber _
        )

        Console.WriteLine( _
            "It received our request at {0} UTC and responded to it at {1} UTC.", _
            packet.ReceiveTimestamp, _
            packet.TransmitTimestamp _
        )

        Console.WriteLine("")

        Dim current As DateTime = DateTime.Now
        Dim exact As DateTime = current.Add(response.TimeOffset.ToTimeSpan)
        Console.WriteLine( _
            "The current local time is {0} and it should be adjusted to {1}.", _
            current, _
            exact _
        )
    End Sub

End Class
