add timeout for ws connection

This commit is contained in:
Dmitry Borisenko
2021-12-07 22:14:59 +01:00
parent 75f057f67a
commit f18102d63e

View File

@@ -1,9 +1,6 @@
<script context="module"> <script context="module">
export function WSpush(ws, topic, value) { export function WSpush(ws, topic, value) {
console.log(ws, topic, value); console.log(ws, topic, value);
//if (socketConnected) {
// socket[ws].send('{"path":"' + topic + '/control", "status":"' + value.toString() + '"}');
//}
} }
</script> </script>
@@ -136,60 +133,62 @@
let socket = []; let socket = [];
let socketConnected = false; let socketConnected = false;
let pages = []; let pages = [];
let messages = []; let coreMessages = [];
let LOG_MAX_MESSAGES = 10; let LOG_MAX_MESSAGES = 10;
//секция функций========================================================================= //секция функций=========================================================================
function wsConnect() { function wsConnect() {
socket[0] = new WebSocket("ws://" + myip + "/ws"); socket[0] = new WebSocket("ws://" + myip + "/ws");
}
function wsEventAdd() {
socket[0].addEventListener("open", function (event) { socket[0].addEventListener("open", function (event) {
console.log("WS CONNECTED! " + myip); console.log("WS CONNECTED! " + myip);
socketConnected = true; socketConnected = true;
socket[0].send("HELLO"); //socket[0].send("HELLO");
}); });
socket[0].addEventListener("message", function (event) { socket[0].addEventListener("message", function (event) {
console.log("NEW data packet " + myip, event.data); let data = event.data.toString();
onMessage("test", event.data); //console.log("NEW data packet " + myip, event.data);
if (data.includes("/core/")) {
data = data.replace("/core/", "");
addCoreMsg(data);
}
}); });
socket[0].addEventListener("close", (event) => { socket[0].addEventListener("close", (event) => {
socketConnected = false; socketConnected = false;
wsConnect();
console.log("ws close " + myip); console.log("ws close " + myip);
}); });
socket[0].addEventListener("error", function (event) { socket[0].addEventListener("error", function (event) {
socketConnected = false; socketConnected = false;
console.log(myip + " WebSocket error: ", event); wsConnect();
console.log(myip + " ws error: ", event);
}); });
} }
// Make the function wait until the connection is made... function WSpushLocal(ws, topic, value) {
//function waitForSocketConnection(socket, callback) { //console.log(ws, topic, value);
// setTimeout(function () { //wsSendMsg(topic);
// if (socket.readyState === 1) { //if (socketConnected) {
// console.log("Connection is made"); // socket[ws].send('{"path":"' + topic + '/control", "status":"' + value.toString() + '"}');
// if (callback != null) { //}
// callback();
// }
// } else {
// console.log("wait for connection...");
// waitForSocketConnection(socket, callback);
// }
// }, 5); // wait 5 milisecond for the connection...
//}
var reconnectTimer;
function tryReconnect() {
reconnectTimer = setInterval(reconnect, 3000);
} }
function reconnect() {
if (socket[0].readyState == 1) { function wsSendMsg(msg) {
console.log("web socket connected"); if (!socket[0]) return;
} else { if (socket[0].readyState === 1) {
console.log("Try reconnect to web socket"); socket[0].send(msg);
wsConnect();
} }
} }
function myStopFunction() {
clearInterval(reconnectTimer); function wsTestMsgTask() {
setTimeout(wsTestMsgTask, 10000);
if (!socket[0]) return;
if (socket[0].readyState === 1) {
console.log("test");
socket[0].send("test");
}
} }
const syntaxHighlight = (json) => { const syntaxHighlight = (json) => {
@@ -205,9 +204,6 @@
return json; return json;
}; };
//находит в массиве с виджетами wigets все уникальные названия страниц и сортирует названия по алфавиту
//На выходе получаем массив с названиями страниц - pages
//[{page:"страница1"},{page:"страница2"},]
function findNewPage() { function findNewPage() {
pages = []; pages = [];
const newPage = Array.from(new Set(Array.from(wigets, ({ page }) => page))); const newPage = Array.from(new Set(Array.from(wigets, ({ page }) => page)));
@@ -228,8 +224,9 @@
onMount(async () => { onMount(async () => {
console.log("mounted"); console.log("mounted");
wsConnect(); wsConnect();
wsEventAdd();
wsTestMsgTask();
findNewPage(); findNewPage();
tryReconnect();
}); });
function wigetsUpdate() { function wigetsUpdate() {
@@ -237,20 +234,13 @@
findNewPage(); findNewPage();
} }
const onMessage = (topic, message) => { const addCoreMsg = (msg) => {
const msg = message.toString(); if (coreMessages.length > Number(LOG_MAX_MESSAGES)) {
const time = new Date().getTime(); coreMessages = coreMessages.slice(0);
addMessage(topic, msg, time);
// client.end();
};
const addMessage = (topic, msg, time) => {
if (messages.length > Number(LOG_MAX_MESSAGES)) {
messages = messages.slice(0);
} }
messages = [...messages, { topic, msg, time, colored: syntaxHighlight(msg), closed: true }]; const time = new Date().getTime();
messages.sort(function (a, b) { coreMessages = [...coreMessages, { time, msg }];
a.closed = true; coreMessages.sort(function (a, b) {
if (a.time > b.time) { if (a.time > b.time) {
return -1; return -1;
} }
@@ -337,13 +327,11 @@
</Route> </Route>
<Route path="/utilities" /> <Route path="/utilities" />
<Route path="/log"> <Route path="/log">
<div class="flex justify-center w-2/3"> <Card title={"Лог"}>
<Card title={"Лог"}> {#each coreMessages as message, i}
{#each messages as message, i} <div class={message.msg.toString().includes("[E]") ? "text-red-500" : "text-black"}>{message.msg}</div>
<div class={message.msg.toString().includes("[E]") ? "text-red-500" : "text-black"}>{message.msg}</div> {/each}
{/each} </Card>
</Card>
</div>
</Route> </Route>
<Route path="/about" /> <Route path="/about" />
</div> </div>