var servers = ['chkno.net', 'rc2.chkno.net', 'echto.net', 'the-wes.com', 'vibrantlogic.com'];
var session = Math.random(); // For outgoing message IDs
- var since = {}; // server -> time: For fetch?since=
- var seen = {}; // seen_key -> true
+ 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
+ // ID: Some unique string for deduping
+ // Text: The text of the message
+ // UI: The DOM node for this message in the UI
function rcnick() {
var nick = localStorage.getItem("nick");
}
function rcaddmessagetohistory(message) {
- var d = document.createElement("div");
+ message.UI = document.createElement("div");
var text = (message.Time ? rcformattime(message.Time) : "") + " " + message.Text;
- d.appendChild(document.createTextNode(text));
+ message.UI.appendChild(document.createTextNode(text));
var h = document.getElementById("history");
- h.appendChild(d);
+ h.appendChild(message.UI);
window.scrollTo(0, document.body.scrollHeight);
- return d;
}
function make_seen_key(id, text) {
m.Time = new Date(m.Time);
var seen_key = make_seen_key(m.ID, m.Text);
if (!(seen_key in seen)) {
- seen[seen_key] = true;
+ seen[seen_key] = m;
rcaddmessagetohistory(m);
for (var i in servers) {
rcchangeserverstatus(servers[i], "sad");
if (rtxt != null) {
var messages = JSON.parse(rtxt);
if (messages != null) {
- rcreceivemessages(server, messages);
delay = 40;
if (messages.length >= 1 && "Time" in messages[messages.length-1]) {
since[server] = messages[messages.length-1].Time;
}
+ rcreceivemessages(server, messages);
}
}
}
function rcsend(d, message) {
var id = new Date().getTime() + "-" + session + "-" + Math.random();
- seen[make_seen_key(id, message)] = true;
+ seen[make_seen_key(id, message)] = message;
var path = "/speak" +
"?id=" + encodeURIComponent(id) +
"&text=" + encodeURIComponent(message);
message = "<" + rcnick() + "> " + input;
}
- var d = rcaddmessagetohistory({'Text': message});
- rcsend(d, message);
+ var m = {'Text': message};
+ rcaddmessagetohistory(m);
+ rcsend(m.UI, m);
}
function rckeydown(event) {