ui: fix messages connection

This commit is contained in:
undefined committed 2024-06-09 11:36:10 +08:00
1 parent c05accf343
commit 3df346289a
4 files changed
+9 -10

No files matched your search

+1 -1
View File
@@ -89,7 +89,7 @@ const UIConfig = {
esModuleInterop: true, esModuleInterop: true,
resolveJsonModule: true, resolveJsonModule: true,
jsx: 'react', jsx: 'react',
module: 'commonjs', module: 'ESNext',
skipLibCheck: true, skipLibCheck: true,
allowSyntheticDefaultImports: true, allowSyntheticDefaultImports: true,
target: 'es2020', target: 'es2020',
@@ -77,7 +77,6 @@ export default function (env: { watch?: boolean, production?: boolean, measure?:
polyfill: './polyfill.ts', polyfill: './polyfill.ts',
'default.theme': './theme/default.js', 'default.theme': './theme/default.js',
'service-worker': './service-worker.ts', 'service-worker': './service-worker.ts',
'messages-shared-worker': './components/message/worker.ts',
}, },
cache: { cache: {
type: 'filesystem', type: 'filesystem',
@@ -61,7 +61,7 @@ const onmessage = (msg) => {
const initWorkerMode = (endpoint) => { const initWorkerMode = (endpoint) => {
console.log('Messages: using SharedWorker'); console.log('Messages: using SharedWorker');
const worker = new SharedWorker('/messages-shared-worker.js', { name: 'HydroMessagesWorker' }); const worker = new SharedWorker(new URL('./worker.ts', import.meta.url), { name: 'HydroMessagesWorker' });
worker.port.start(); worker.port.start();
window.addEventListener('beforeunload', () => { window.addEventListener('beforeunload', () => {
worker.port.postMessage({ type: 'unload' }); worker.port.postMessage({ type: 'unload' });
@@ -31,12 +31,17 @@ function broadcastMsg(message: any) {
function initConn(path: string, port: MessagePort, cookie: any) { function initConn(path: string, port: MessagePort, cookie: any) {
if (cookie !== lcookie) conn?.close(); if (cookie !== lcookie) conn?.close();
else if (conn && conn.readyState === conn.OPEN) return; else if (conn && conn.readyState === conn.OPEN) return;
const url = new URL(path, location.origin);
if (cookie) url.searchParams.set('sid', cookie.split('sid=')[1].split(';')[0]);
lcookie = cookie; lcookie = cookie;
console.log('Init connection for', path); console.log('Init connection for', path);
conn?.close(); conn?.close();
conn = new ReconnectingWebsocket(path); conn = new ReconnectingWebsocket(url.toString());
ports.push(port); ports.push(port);
conn.onopen = () => conn.send(cookie); conn.onopen = () => {
console.log('Connected to', path);
broadcastMsg({ type: 'open' });
};
conn.onerror = () => broadcastMsg({ type: 'error' }); conn.onerror = () => broadcastMsg({ type: 'error' });
conn.onclose = (ev) => broadcastMsg({ type: 'close', error: ev.reason }); conn.onclose = (ev) => broadcastMsg({ type: 'close', error: ev.reason });
conn.onmessage = (message) => { conn.onmessage = (message) => {
@@ -46,14 +51,9 @@ function initConn(path: string, port: MessagePort, cookie: any) {
return; return;
} }
const payload = JSON.parse(message.data); const payload = JSON.parse(message.data);
if (payload.event === 'auth') {
if (['PermissionError', 'PrivilegeError'].includes(payload.error)) { if (['PermissionError', 'PrivilegeError'].includes(payload.error)) {
broadcastMsg({ type: 'close', error: payload.error }); broadcastMsg({ type: 'close', error: payload.error });
conn.close(); conn.close();
} else {
console.log('Connected to', path);
broadcastMsg({ type: 'open' });
}
} else { } else {
broadcastMsg({ type: 'message', payload }); broadcastMsg({ type: 'message', payload });
let acked = false; let acked = false;