chat/static/js/chat.js

66 lines
1.7 KiB
JavaScript

state = "authenticating";
function authenticate(event) {
$("#alert").hide();
websocket.send(JSON.stringify({name: $("#username").val() }));
}
$(function(){
$("#auth").hide();
$("#alert").hide();
$("#user-display").hide();
$("#stream").hide();
$("#submit-username").click(authenticate);
setupWS();
});
function setupWS() {
a = document.createElement("a");
a.href = document.URL;
url = "ws://" + a.hostname + ":8000/ws/";
websocket = new WebSocket(url);
websocket.onopen = function(evt) { onOpen(evt) };
websocket.onclose = function(evt) { onClose(evt) };
websocket.onmessage = function(evt) { onMessage(evt) };
websocket.onerror = function(evt) { onError(evt) };
}
function onOpen(e) {
console.log("websocket opened");
$("#auth").show();
}
function onClose(e) {
console.error("websocket disconnected");
$("#alert").show().text("reload page");
$("#stream, #user-display, #auth").hide();
}
function onMessage(e) {
var payload = JSON.parse(e.data);
if (state === "authenticating") {
if (!payload.success) {
console.error(payload);
$("#alert").show().text(payload.error);
return;
}
$("#user-display .name").text($("#username").val());
$("#user-display").show();
$("#auth").hide();
$("#stream").show();
state = "chatting";
} else if (state === "chatting") {
console.log(payload);
}
}
function onError(e) {
console.error("websocket connection failure: " + JSON.stringify(e));
}
function negociate() {
var payload = {name: $("#username").val()};
websocket.send(JSON.stringify(payload));
}