(function () { "use strict"; var input_div = null; var clients_list = null; function write(msg) { common.write(input_div.previousSibling, msg); } function master_send(hub, client_ids, client_id, obj) { obj.client_ids = client_ids; obj.client_id = client_id; hub.send(JSON.stringify(obj)); } function setup_chat(hub) { clients_list = new common.ClientsList(); input_div = document.createElement("div"); input_div.append(document.createTextNode("MASTER ")); input_div.append(common.get_input(function () { var input = input_div.getElementsByTagName("input")[0]; master_send(hub, clients_list.selected(), null, { "name": "MASTER", "data": input.value, }); write("MASTER [null]: " + input.value); input.value = ""; })); document.body.append(document.createElement("div")); // output document.body.append(input_div); } function open() { setup_chat(this); write("connected to " + ws_uri); } function close() { write("connection lost"); } function join_leave_broadcast(hub, client_id, client_name, action) { write("[action]: " + client_name + " " + obj.action + "s"); master_send(hub, clients_list.all(), obj.client_id, { "action": obj.action, "name": client_name, }); } function message(msg) { var obj = JSON.parse(msg.data); var client_name; if (obj.action === "join") { clients_list.append(obj.client_id); join_leave_broadcast( this, obj.client_id, clients_list.get_name(obj.client_id), obj.action ); } else if (obj.action === "leave") { client_name = clients_list.get_name(obj.client_id); clients_list.remove(obj.client_id); join_leave_broadcast(this, obj.client_id, client_name, obj.action); } else if (obj.action == "set_name") { client_name = clients_list.set_name(obj.client_id, obj.name); write( "[action]: " + client_name + " changes name to " + obj.name ); master_send(this, clients_list.all(), obj.client_id, { "action": "set_name", "old_name": client_name, "name": obj.name, }); } else if (obj.hasOwnProperty("data")) { client_name = clients_list.get_name(obj.client_id); write(client_name + " [" + obj.client_id + "]: " + obj.data); master_send(this, clients_list.all(), obj.client_id, { "name": client_name, "data": obj.data, }); } } common.setup(function () {new common.HubClient(ws_uri, open, close, message)}); })();