mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-10 06:06:47 -04:00
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
// Copyright 2014 Team 254. All Rights Reserved.
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
//
|
|
// Shared code for initiating websocket connections back to the server for full-duplex communication.
|
|
|
|
var CheesyWebsocket = function(path, events) {
|
|
var that = this;
|
|
var protocol = "ws://";
|
|
if (window.location.protocol === "https:") {
|
|
protocol = "wss://";
|
|
}
|
|
var url = protocol + window.location.hostname;
|
|
if (window.location.port !== "") {
|
|
url += ":" + window.location.port;
|
|
}
|
|
url += path;
|
|
|
|
// Append the page's query string to the websocket URL.
|
|
url += window.location.search;
|
|
|
|
// Insert a default error-handling event if a custom one doesn't already exist.
|
|
if (!events.hasOwnProperty("error")) {
|
|
events.error = function(event) {
|
|
// Data is just an error string.
|
|
console.log(event.data);
|
|
alert(event.data);
|
|
};
|
|
}
|
|
|
|
// Parse the display parameters that will be present in the query string if this is a display.
|
|
var displayId = new URLSearchParams(window.location.search).get("displayId");
|
|
|
|
// Insert an event to allow the server to force-reload the client for any display.
|
|
events.reload = function(event) {
|
|
if (event.data === null || event.data === displayId) {
|
|
location.reload();
|
|
}
|
|
};
|
|
|
|
// Insert an event to allow reconfiguration if this is a display.
|
|
if (!events.hasOwnProperty("displayConfiguration")) {
|
|
events.displayConfiguration = function (event) {
|
|
var newUrl = event.data;
|
|
|
|
// Reload the display if the configuration has changed.
|
|
if (newUrl !== window.location.pathname + window.location.search) {
|
|
window.location = newUrl;
|
|
}
|
|
};
|
|
}
|
|
|
|
this.connect = function() {
|
|
this.websocket = $.websocket(url, {
|
|
open: function() {
|
|
console.log("Websocket connected to the server at " + url + ".")
|
|
},
|
|
close: function() {
|
|
console.log("Websocket lost connection to the server. Reconnecting in 3 seconds...");
|
|
setTimeout(that.connect, 3000);
|
|
},
|
|
events: events
|
|
});
|
|
};
|
|
|
|
this.send = function(type, data) {
|
|
this.websocket.send(type, data);
|
|
};
|
|
|
|
this.connect();
|
|
};
|