mirror of
https://github.com/IoTManagerProject/IoTManagerWeb.git
synced 2026-03-26 23:12:34 +03:00
add timeout for ws connection
This commit is contained in:
104
src/App.svelte
104
src/App.svelte
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user