]> git.mar77i.info Git - hublib/blob - hubapps/first/master.js
d6074e8588d6e0ca6b55b1bfcf6785eca08814af
[hublib] / hubapps / first / master.js
1 (function () {
2 "use strict";
3 var input_div = null;
4 var clients_list = null;
5
6 function write(msg) {
7 common.write(input_div.previousSibling, msg);
8 }
9 function master_send(hub, client_ids, client_id, obj) {
10 obj.client_ids = client_ids;
11 obj.client_id = client_id;
12 hub.send(JSON.stringify(obj));
13 }
14
15 function setup_chat(hub) {
16 clients_list = new common.ClientsList();
17 input_div = document.createElement("div");
18 input_div.append(document.createTextNode("MASTER "));
19 input_div.append(common.get_input(function () {
20 var input = input_div.getElementsByTagName("input")[0];
21 master_send(hub, clients_list.selected(), null, {
22 "name": "MASTER",
23 "data": input.value,
24 });
25 write("MASTER [null]: " + input.value);
26 input.value = "";
27 }));
28
29 document.body.append(document.createElement("div")); // output
30 document.body.append(input_div);
31 }
32
33 function open() {
34 setup_chat(this);
35 write("connected to " + ws_uri);
36 }
37
38 function close() {
39 write("connection lost");
40 }
41
42 function join_leave_broadcast(hub, client_id, client_name, action) {
43 write("[action]: " + client_name + " " + obj.action + "s");
44 master_send(hub, clients_list.all(), obj.client_id, {
45 "action": obj.action,
46 "name": client_name,
47 });
48 }
49
50 function message(msg) {
51 var obj = JSON.parse(msg.data);
52 var client_name;
53 if (obj.action === "join") {
54 clients_list.append(obj.client_id);
55 join_leave_broadcast(
56 this, obj.client_id, clients_list.get_name(obj.client_id), obj.action
57 );
58 } else if (obj.action === "leave") {
59 client_name = clients_list.get_name(obj.client_id);
60 clients_list.remove(obj.client_id);
61 join_leave_broadcast(this, obj.client_id, client_name, obj.action);
62 } else if (obj.action == "set_name") {
63 client_name = clients_list.set_name(obj.client_id, obj.name);
64 write(
65 "[action]: " +
66 client_name +
67 " changes name to " +
68 obj.name
69 );
70 master_send(this, clients_list.all(), obj.client_id, {
71 "action": "set_name",
72 "old_name": client_name,
73 "name": obj.name,
74 });
75 } else if (obj.hasOwnProperty("data")) {
76 client_name = clients_list.get_name(obj.client_id);
77 write(client_name + " [" + obj.client_id + "]: " + obj.data);
78 master_send(this, clients_list.all(), obj.client_id, {
79 "name": client_name,
80 "data": obj.data,
81 });
82 }
83 }
84
85 common.setup(function () {new common.HubClient(ws_uri, open, close, message)});
86 })();