-
-
Notifications
You must be signed in to change notification settings - Fork 52
/
Copy pathapp.js
109 lines (91 loc) · 3.6 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
const neffos = require('neffos.js');
var scheme = document.location.protocol == "https:" ? "wss" : "ws";
var port = document.location.port ? ":" + document.location.port : "";
var wsURL = scheme + "://" + document.location.hostname + port + "/echo";
var outputTxt = document.getElementById("output");
function addMessage(msg) {
outputTxt.innerHTML += msg + "\n";
}
function handleError(reason) {
console.log(reason);
window.alert(reason);
}
class UserMessage {
constructor(from, text) {
this.from = from;
this.text = text;
}
}
async function handleNamespaceConnectedConn(nsConn) {
let roomToJoin = prompt("Please specify a room to join, i.e room1: ");
nsConn.joinRoom(roomToJoin);
let inputTxt = document.getElementById("input");
let sendBtn = document.getElementById("sendBtn");
sendBtn.disabled = false;
sendBtn.onclick = function () {
const input = inputTxt.value;
inputTxt.value = "";
switch (input) {
case "leave":
nsConn.room(roomToJoin).leave();
// or room := nsConn.joinRoom.... room.leave();
roomToJoin = "";
break;
default:
const userMsg = new UserMessage(nsConn.conn.ID, toID, input);
if (roomToJoin !== "") {
nsConn.room(roomToJoin).emit("chat", neffos.marshal(userMsg))
} else {
nsConn.emit("chat", neffos.marshal(userMsg));
}
addMessage("Me: " + input);
}
};
}
async function runExample() {
// You can omit the "default" and simply define only Events, the namespace will be an empty string"",
// however if you decide to make any changes on this example make sure the changes are reflecting inside the ../server.go file as well.
try {
const username = prompt("Please specify a username: ");
const conn = await neffos.dial(wsURL, {
default: { // "default" namespace.
_OnNamespaceConnected: function (nsConn, msg) {
addMessage("connected to namespace: " + msg.Namespace);
handleNamespaceConnectedConn(nsConn);
},
_OnNamespaceDisconnect: function (nsConn, msg) {
addMessage("disconnected from namespace: " + msg.Namespace);
},
_OnRoomJoined: function (nsConn, msg) {
addMessage("joined to room: " + msg.Room);
},
_OnRoomLeft: function (nsConn, msg) {
addMessage("left from room: " + msg.Room);
},
notify: function (nsConn, msg) {
addMessage(msg.Body);
},
chat: function (nsConn, msg) { // "chat" event.
const userMsg = msg.unmarshal()
if (userMsg.to && userMsg.to !== "") {
userMsg.from = "private message: " + userMsg.from;
}
if (msg.Room !== "") {
userMsg.from = msg.Room + ": " + userMsg.from;
}
addMessage(userMsg.from + ": " + userMsg.text);
}
}
}, {
headers: {
'X-Username': username
},
// if > 0 then on network failures it tries to reconnect every 5 seconds, defaults to 0 (disabled).
reconnect: 5000
});
conn.connect("default");
} catch (err) {
handleError(err);
}
}
runExample();