view clock.ur @ 12:bbdedfde154e

Add a calendar control.
author Karn Kallio <kkallio@eka>
date Thu, 28 Jul 2011 10:24:34 -0430
parents ccd0a169e827
children 2947170fcfd6
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 server local));
        spawn (loop ())
    end

fun signal t = Basis.signal t.Source