Hi,
It is often important, especially for server applications, to know if the
current local clock is still OK. The standard way for doing that is part of NTP
(http://en.wikipedia.org/wiki/Network_Time_Protocol). I implemented two SNTP
clients (one with ZTimestamp's second precision and another one using
DateAndTime's nanosecond precision) that can be used to check the difference
between the local clock and the clock of any NTP server.
ZTimestampPreciseSNTPClient new clockDifference.
-0:00:00:00.005786228
This reports that the difference between the local and remote clocks is in the
order of 5ms, as computed in one specific way. Other queries are related to the
Clock synchronisation algorithm.
ZTimestampPreciseSNTPClient new localClockOffset.
0:00:00:00.065466869
ZTimestampPreciseSNTPClient new roundtripDelay.
0:00:00:00.037001908
In practice the following would be a useful practical check.
ZTimestampPreciseSNTPClient new
enforceClockDifference: 2 seconds
ifFail: [ :delta |
self warn: ('Clock difference {1} > 2s' format: { delta
}) ];
close.
As NTP uses UDP datagrams, this is a nice example for that as well. The code
can be found in the following repository:
http://mc.stfx.eu/Neo
It is probably easiest to load the ZTimestamp configuration using the
Configuration Browser and then load the bleeding edge version (it is not in de
released version). The code is self-contained and loads cleanly.
ConfigurationOfZTimestamp project bleedingEdge load.
The client contacts a server from pool.ntp.org. The code does only deal with a
limited aspect of NTP, which is rather complex and wonderful subject matter
(http://tools.ietf.org/html/rfc2030). My goal was to get a dependable result,
not be be super accurate.
Enjoy.
Sven
--
Sven Van Caekenberghe
http://stfx.eu
Smalltalk is the Red Pill