mirror of https://github.com/anoshenko/rui.git
105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
var socket
|
|
var socketUrl
|
|
|
|
function sendMessage(message) {
|
|
if (socket) {
|
|
socket.send(message)
|
|
}
|
|
}
|
|
|
|
window.onload = function() {
|
|
socketUrl = document.location.protocol == "https:" ? "wss://" : "ws://"
|
|
socketUrl += document.location.hostname
|
|
var port = document.location.port
|
|
if (port) {
|
|
socketUrl += ":" + port
|
|
}
|
|
socketUrl += window.location.pathname + "ws"
|
|
|
|
socket = new WebSocket(socketUrl);
|
|
socket.onopen = socketOpen;
|
|
socket.onclose = socketClose;
|
|
socket.onerror = socketError;
|
|
socket.onmessage = function(event) {
|
|
window.execScript ? window.execScript(event.data) : window.eval(event.data);
|
|
};
|
|
};
|
|
|
|
function socketOpen() {
|
|
|
|
const touch_screen = (('ontouchstart' in document.documentElement) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) ? "1" : "0";
|
|
var message = "startSession{touch=" + touch_screen
|
|
|
|
const style = window.getComputedStyle(document.body);
|
|
if (style) {
|
|
var direction = style.getPropertyValue('direction');
|
|
if (direction) {
|
|
message += ",direction=" + direction
|
|
}
|
|
}
|
|
|
|
const lang = window.navigator.language;
|
|
if (lang) {
|
|
message += ",language=\"" + lang + "\"";
|
|
}
|
|
|
|
const langs = window.navigator.languages;
|
|
if (langs) {
|
|
message += ",languages=\"" + langs + "\"";
|
|
}
|
|
|
|
const userAgent = window.navigator.userAgent
|
|
if (userAgent) {
|
|
message += ",user-agent=\"" + userAgent + "\"";
|
|
}
|
|
|
|
const darkThemeMq = window.matchMedia("(prefers-color-scheme: dark)");
|
|
if (darkThemeMq.matches) {
|
|
message += ",dark=1";
|
|
}
|
|
|
|
const pixelRatio = window.devicePixelRatio;
|
|
if (pixelRatio) {
|
|
message += ",pixel-ratio=" + pixelRatio;
|
|
}
|
|
|
|
sendMessage( message + "}" );
|
|
}
|
|
|
|
function socketReopen() {
|
|
sendMessage( "reconnect{session=" + sessionID + "}" );
|
|
}
|
|
|
|
function socketReconnect() {
|
|
if (!socket) {
|
|
socket = new WebSocket(socketUrl);
|
|
socket.onopen = socketReopen;
|
|
socket.onclose = socketClose;
|
|
socket.onerror = socketError;
|
|
socket.onmessage = function(event) {
|
|
window.execScript ? window.execScript(event.data) : window.eval(event.data);
|
|
};
|
|
}
|
|
}
|
|
|
|
function socketClose(event) {
|
|
console.log("socket closed")
|
|
socket = null;
|
|
if (!event.wasClean && windowFocus) {
|
|
window.setTimeout(socketReconnect, 10000);
|
|
}
|
|
}
|
|
|
|
function socketError(error) {
|
|
console.log(error);
|
|
}
|
|
|
|
window.onfocus = function(event) {
|
|
windowFocus = true
|
|
if (!socket) {
|
|
socketReconnect()
|
|
} else {
|
|
sendMessage( "session-resume{session=" + sessionID +"}" );
|
|
}
|
|
}
|