-"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)});
})();