mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 18:51:03 +01:00
b37b369b51
Former-commit-id: 9753e3e45c7c24788b97814d3ecfb4b03f5ff414
112 lines
4.7 KiB
HTML
112 lines
4.7 KiB
HTML
<!-- the message's input -->
|
|
<input id="input" type="text" />
|
|
|
|
<!-- when clicked then a websocket event will be sent to the server, at this example we registered the 'chat' -->
|
|
<button id="sendBtn" disabled>Send</button>
|
|
|
|
<!-- the messages will be shown here -->
|
|
<pre id="output"></pre>
|
|
<!-- import the iris client-side library for browser from a CDN or locally.
|
|
However, `neffos.(min.)js` is a NPM package too so alternatively,
|
|
you can use it as dependency on your package.json and all nodejs-npm tooling become available:
|
|
see the "browserify" example for more-->
|
|
<script src="https://cdn.jsdelivr.net/npm/neffos.js@latest/dist/neffos.min.js"></script>
|
|
<script>
|
|
// `neffos` global variable is available now.
|
|
var scheme = document.location.protocol == "https:" ? "wss" : "ws";
|
|
var port = document.location.port ? ":" + document.location.port : "";
|
|
var wsURL = scheme + "://" + document.location.hostname + port + "/echo";
|
|
|
|
const enableJWT = true;
|
|
if (enableJWT) {
|
|
// This is just a signature and a payload of an example content,
|
|
// please replace this with your logic.
|
|
//
|
|
// Add a random letter in front of the token to make it
|
|
// invalid and see that this client is not allowed to dial the websocket server.
|
|
const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjozMjEzMjF9.8waEX7-vPKACa-Soi1pQvW3Rl8QY-SUFcHKTLZI4mvU";
|
|
wsURL += "?token=" + token;
|
|
}
|
|
|
|
var outputTxt = document.getElementById("output");
|
|
function addMessage(msg) {
|
|
outputTxt.innerHTML += msg + "\n";
|
|
}
|
|
|
|
function handleError(reason) {
|
|
console.log(reason);
|
|
window.alert("error: see the dev console");
|
|
}
|
|
|
|
function handleNamespaceConnectedConn(nsConn) {
|
|
nsConn.emit("Hello from browser client side!");
|
|
|
|
let inputTxt = document.getElementById("input");
|
|
let sendBtn = document.getElementById("sendBtn");
|
|
|
|
sendBtn.disabled = false;
|
|
sendBtn.onclick = function () {
|
|
const input = inputTxt.value;
|
|
inputTxt.value = "";
|
|
nsConn.emit("chat", input);
|
|
addMessage("Me: " + input);
|
|
};
|
|
}
|
|
|
|
const username = window.prompt("Your username?");
|
|
|
|
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 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);
|
|
},
|
|
chat: function (nsConn, msg) { // "chat" event.
|
|
addMessage(msg.Body);
|
|
}
|
|
}
|
|
},{
|
|
headers: {
|
|
"X-Username": username,
|
|
}
|
|
});
|
|
|
|
// You can either wait to conenct or just conn.connect("connect")
|
|
// and put the `handleNamespaceConnectedConn` inside `_OnNamespaceConnected` callback instead.
|
|
// const nsConn = await conn.connect("default");
|
|
// nsConn.emit(...); handleNamespaceConnectedConn(nsConn);
|
|
conn.connect("default");
|
|
|
|
} catch (err) {
|
|
handleError(err);
|
|
}
|
|
}
|
|
|
|
runExample();
|
|
|
|
// If "await" and "async" are available, use them instead^, all modern browsers support those,
|
|
// all of the javascript examples will be written using async/await method instead of promise then/catch callbacks.
|
|
// A usage example of promise then/catch follows:
|
|
// neffos.dial(wsURL, {
|
|
// default: { // "default" namespace.
|
|
// _OnNamespaceConnected: function (ns, msg) {
|
|
// addMessage("connected to namespace: " + msg.Namespace);
|
|
// },
|
|
// _OnNamespaceDisconnect: function (ns, msg) {
|
|
// addMessage("disconnected from namespace: " + msg.Namespace);
|
|
// },
|
|
// chat: function (ns, msg) { // "chat" event.
|
|
// addMessage(msg.Body);
|
|
// }
|
|
// }
|
|
// }).then(function (conn) {
|
|
// conn.connect("default").then(handleNamespaceConnectedConn).catch(handleError);
|
|
// }).catch(handleError);
|
|
</script> |