Mercurial > gui
view clock.ur @ 32:d32fb0f7b137
Update for Ur/Web's new type class handling
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sun, 29 Jul 2012 12:28:46 -0400 |
parents | 2947170fcfd6 |
children |
line wrap: on
line source
(** Reactive view of the current time *) type t = { Source : source time, (* Server time as of last tick event *) Skew : source int, (* How many seconds do we add to the local clock to match the server clock? *) Period : int (* How many milliseconds between ticks? *) } fun create ms = tm <- now; t <- source tm; sk <- source 0; return {Source = t, Skew = sk, Period = ms} fun start t = let fun loop () = sleep t.Period; tm <- now; sk <- get t.Skew; set t.Source (addSeconds tm sk); loop () fun serverTime () = now in spawn (server <- rpc (serverTime ()); local <- now; set t.Skew (diffInSeconds local server)); spawn (loop ()) end fun signal t = Basis.signal t.Source