This commit is contained in:
2026-02-17 20:43:23 +03:00
commit 55d819f935
22 changed files with 5874 additions and 0 deletions

88
src/workers/worker.js Normal file
View File

@@ -0,0 +1,88 @@
let socket
let clients = []
let reconnectAttempts = 0
const MAX_RECONNECT_ATTEMPTS = 5
function connectWebSocket(url) {
try {
socket = new WebSocket(url)
socket.onopen = () => {
console.log('[Shared Worker] WebSocket connected')
reconnectAttempts = 0
broadcast({ type: 'STATUS', connected: true })
}
socket.onmessage = (event) => {
console.log('[Shared Worker] Get message')
const data = JSON.parse(event.data)
broadcast(data)
}
socket.onclose = () => {
console.log('[Shared Worker] WebSocket disconnected')
broadcast({ type: 'STATUS', connected: false })
// if (reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
// reconnectAttempts++
// setTimeout(() => {
// console.log(`[Shared Worker] Reconnecting (attempt ${reconnectAttempts})...`)
// connectWebSocket(url)
// }, 1000 * reconnectAttempts)
// }
}
socket.onerror = (error) => {
console.error('[Shared Worker] WebSocket error:', error)
broadcast({ type: 'ERROR', message: error.message })
}
} catch (error) {
console.error('[Shared Worker] Failed to create WebSocket:', error)
}
}
function broadcast(message) {
clients.forEach((port) => port.postMessage(message))
}
onconnect = function (event) {
const port = event.ports[0]
clients.push(port)
port.onmessage = function (e) {
const { command, data } = e.data
console.log('Received command', command, data)
switch (command) {
case 'CONNECT':
if (!socket || socket.readyState !== WebSocket.OPEN) {
connectWebSocket(data.url)
}
break
case 'SEND':
if (socket && socket.readyState === WebSocket.OPEN) {
socket.send(JSON.stringify(data))
} else {
port.postMessage('[Shared Worker] WebSocket not open. Cannot send message.')
}
break
case 'CLOSE':
if (socket && socket.readyState === WebSocket.OPEN) {
socket.close()
}
break
}
}
const status = { type: 'STATUS' }
if (socket) {
status.connected = socket.readyState === WebSocket.OPEN
} else {
status.connected = false
}
port.postMessage(status)
}