X-Git-Url: https://git.mar77i.info/?a=blobdiff_plain;f=hubapps%2Ffirst%2Fmaster.js;fp=hubapps%2Ffirst%2Fmaster.js;h=d6074e8588d6e0ca6b55b1bfcf6785eca08814af;hb=c0e574584af0d45070e5fa81fcbcd1dccc2c5a42;hp=e33e9fecf19a0923feb3d253141c50a74edf3d62;hpb=d23acd0d6d03d822e4505c64f71587f55e8dc2b6;p=hublib diff --git a/hubapps/first/master.js b/hubapps/first/master.js index e33e9fe..d6074e8 100644 --- a/hubapps/first/master.js +++ b/hubapps/first/master.js @@ -1,15 +1,86 @@ -"use strict"; - (function () { - document.addEventListener("readystatechange", function (event) { - if (!event) { - event = window.event; - } - if (event.target.readyState !== "complete") { - return; + "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, + }); } - document.body.append(document.createTextNode("(this is master.js) ")); - // hide real url - history.pushState({}, "", new URL(window.location.origin + "/")); - }); + } + + common.setup(function () {new common.HubClient(ws_uri, open, close, message)}); })();