view clock.ur @ 24:d314d2ec3300

Be able to obtain the name from a navItem
author Ron de Bruijn <rmbruijn@gmail.com>
date Sun, 04 Dec 2011 16:45:31 +0100
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