X-Git-Url: http://git.scottworley.com/reliable-chat/blobdiff_plain/705e26cf257d96a76dca724d8cd1c21b9f32d3f9..16640c5d843dd7fd5edbd5c98ef6035ffa96eea4:/webclient/rc.html?ds=sidebyside diff --git a/webclient/rc.html b/webclient/rc.html index 7517d14..f3abaf3 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,8 +168,10 @@ 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}; + m.ServerTimes = {}; + m.ServerTimes[server] = m.Time; seen[seen_key] = m; rcaddmessagetohistory(m); for (var i in servers) {