Skip to content

Commit

Permalink
websocket: add notifications and reconnect on error
Browse files Browse the repository at this point in the history
  • Loading branch information
seriousm4x committed May 31, 2022
1 parent 7050088 commit fdb19e5
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 41 deletions.
16 changes: 13 additions & 3 deletions app/frontend/src/App.svelte
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<script>
import { onMount } from 'svelte';
import store from './store.js';
import socketStore from './socketStore.js';
import Navbar from "./components/Navbar.svelte";
import DeviceCard from "./components/DeviceCard.svelte";
import Toast from "./components/Toast.svelte";
Expand All @@ -16,7 +16,17 @@
}
onMount(() => {
store.subscribe(currentMessage => {
socketStore.subscribeStatus(status => {
if (status == "open") {
showToast("Websocket", "Connected", "success")
} else if (status == "close") {
showToast("Websocket", "Connection closed. Trying to reconnect ...", "danger")
} else if (status == "error") {
showToast("Websocket", "Error when connecting to websocket", "danger")
}
})
socketStore.subscribeMsg(currentMessage => {
if (currentMessage.type == "init") {
// create devices
devices = [...currentMessage.message.devices]
Expand Down Expand Up @@ -72,7 +82,7 @@
a.click();
} else if (currentMessage.type == "operationStatus") {
if (currentMessage.message == "Success") {
showToast(currentMessage.message, "Device was saved and will be visible on next ping", "success")
showToast(currentMessage.message, "Changes were saved", "success")
} else if (currentMessage.message == "Error") {
showToast(currentMessage.message, "Error while saving the device. Please check the logs.", "danger")
}
Expand Down
12 changes: 6 additions & 6 deletions app/frontend/src/components/DeviceCard.svelte
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
<script>
import store from '../store.js';
import socketStore from '../socketStore.js';
export let device;
let modalDevice = JSON.parse(JSON.stringify(device));
let customPort = {}
function wake(id) {
store.sendMessage({
socketStore.sendMessage({
type: "wake",
id: id
})
}
function shutdown(id) {
store.sendMessage({
socketStore.sendMessage({
type: "shutdown",
id: id
})
}
function deleteDevice() {
store.sendMessage({
socketStore.sendMessage({
type: "delete_device",
id: modalDevice.id
})
}
function updateDevice() {
device = modalDevice;
store.sendMessage({
socketStore.sendMessage({
type: "update_device",
data: modalDevice
})
Expand Down Expand Up @@ -56,7 +56,7 @@
}
modalDevice = modalDevice;
// send to backend
store.sendMessage({
socketStore.sendMessage({
type: "update_port",
data: customPort
})
Expand Down
10 changes: 5 additions & 5 deletions app/frontend/src/components/Navbar.svelte
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<script>
import store from '../store.js';
import socketStore from '../socketStore.js';
import DarkToggle from "./DarkToggle.svelte";
export let visitors;
export let settings;
Expand All @@ -20,22 +20,22 @@
if (Object.keys(data).length < 4) {
return
}
store.sendMessage({
socketStore.sendMessage({
type: "update_device",
data: data
})
}
function updateSettings() {
store.sendMessage({
socketStore.sendMessage({
type: "update_settings",
data: settings
})
hideModal("settings");
}
function scanNetwork() {
store.sendMessage({
socketStore.sendMessage({
type: "scan_network"
})
const btnScan = document.querySelector("#btnScan");
Expand Down Expand Up @@ -76,7 +76,7 @@
}
function backupToFile() {
store.sendMessage({
socketStore.sendMessage({
type: "backup"
})
}
Expand Down
48 changes: 48 additions & 0 deletions app/frontend/src/socketStore.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import {
writable
} from 'svelte/store';

const status = writable('');
const message = writable('');

function initSocket() {
const socket = new WebSocket(`ws://${location.hostname}:${BACKEND_PORT}/wol/`);

// Connection opened
socket.addEventListener('open', function () {
status.set("open");
});

// Connection closed
socket.addEventListener('close', function () {
status.set("close");
setTimeout(function () {
initSocket();
}, 3000);
});

// Connection error
socket.addEventListener('error', function () {
status.set("error");
socket.close()
});

// Listen for messages
socket.addEventListener('message', function (event) {
message.set(JSON.parse(event.data));
});
}

initSocket()

const sendMessage = (message) => {
if (socket.readyState <= 1) {
socket.send(JSON.stringify(message));
}
}

export default {
subscribeMsg: message.subscribe,
subscribeStatus: status.subscribe,
sendMessage
}
27 changes: 0 additions & 27 deletions app/frontend/src/store.js

This file was deleted.

0 comments on commit fdb19e5

Please sign in to comment.