From: Scott Worley Date: Fri, 3 Aug 2012 17:43:26 +0000 (-0700) Subject: Calculate the median of the server timestamps X-Git-Url: http://git.scottworley.com/reliable-chat/commitdiff_plain/40380bd38b8334e7e936502bbb4057ef5318d708?ds=inline;hp=705e26cf257d96a76dca724d8cd1c21b9f32d3f9 Calculate the median of the server timestamps This isn't used yet. Next: rewrite history each time this is updated. --- diff --git a/webclient/rc.html b/webclient/rc.html index 7517d14..988f1fb 100644 --- a/webclient/rc.html +++ b/webclient/rc.html @@ -83,7 +83,7 @@ var since = {}; // server -> time: For fetch?since= var seen = {}; // seen_key -> message // Messages have these fields: - // Time: The server timestamp of the first copy to arrive + // Time: The timestamp. Median of ServerTimes // ID: Some unique string for deduping // Text: The text of the message // ServerTimes: server -> timestamp @@ -145,6 +145,22 @@ return id.replace(/@/g, "@@") + "_@_" + text.replace(/@/g, "@@"); } + function rcupdatemessagetime(message) { + // Set message.Time to be the median of message.ServerTimes + var times = []; + for (var i in message.ServerTimes) { + times.push(message.ServerTimes[i]); + } + times.sort(); + var middle = times.length/2; + if (times.length % 2) { + message.Time = times[middle]; + } else { + var difference = times[middle].getTime() - times[middle-1].getTime(); + message.Time = new Date(times[middle-1].getTime() + difference/2); + } + } + function rcreceivemessages(server, messages) { for (var i in messages) { var m = messages[i]; @@ -152,6 +168,7 @@ var seen_key = make_seen_key(m.ID, m.Text); if (seen_key in seen) { seen[seen_key].ServerTimes[server] = m.Time; + rcupdatemessagetime(seen[seen_key]); } else { m.ServerTimes = {server: m.Time}; seen[seen_key] = m;