view clock.ur @ 18:16447dc6a68c

Introduction of multi-parameter type class for gui components
author Ron de Bruijn <rmbruijn@gmail.com>
date Thu, 22 Sep 2011 19:24:01 +0200
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