mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-19 17:38:19 +08:00
fix connection event push
This commit is contained in:
3 files changed
+28
-26
No files matched your search
@@ -59,14 +59,14 @@ const onmessage = (msg) => {
|
||||
return true;
|
||||
};
|
||||
|
||||
const initWorkerMode = (endpoint) => {
|
||||
const initWorkerMode = () => {
|
||||
console.log('Messages: using SharedWorker');
|
||||
const worker = new SharedWorker(new URL('./worker.ts', import.meta.url), { name: 'HydroMessagesWorker' });
|
||||
worker.port.start();
|
||||
window.addEventListener('beforeunload', () => {
|
||||
worker.port.postMessage({ type: 'unload' });
|
||||
});
|
||||
worker.port.postMessage({ type: 'conn', path: endpoint, cookie: document.cookie });
|
||||
worker.port.postMessage({ type: 'conn', cookie: document.cookie });
|
||||
worker.port.onmessage = async (message) => {
|
||||
if (process.env.NODE_ENV !== 'production') console.log('onmessage: ', message);
|
||||
const { payload, type } = message.data;
|
||||
@@ -89,13 +89,11 @@ const messagePage = new AutoloadPage('messagePage', (pagename) => {
|
||||
action: () => window.open('/home/messages', '_blank'),
|
||||
}).show();
|
||||
}
|
||||
const url = new URL(`${UiContext.ws_prefix}home/messages-conn`, window.location.href);
|
||||
// TODO handle a better way for cookie
|
||||
if (url.host !== window.location.host) url.searchParams.append('sid', document.cookie.split('sid=')[1].split(';')[0]);
|
||||
const url = new URL(`${UiContext.ws_prefix}websocket`, window.location.href);
|
||||
const endpoint = url.toString().replace('http', 'ws');
|
||||
if (window.SharedWorker) {
|
||||
try {
|
||||
initWorkerMode(endpoint);
|
||||
initWorkerMode();
|
||||
return;
|
||||
} catch (e) {
|
||||
console.error('SharedWorker init fail: ', e.message);
|
||||
@@ -129,6 +127,14 @@ const messagePage = new AutoloadPage('messagePage', (pagename) => {
|
||||
localStorage.setItem('page.master', selfId);
|
||||
const masterChannel = new BroadcastChannel('hydro-messages');
|
||||
const sock = new Sock(endpoint);
|
||||
sock.onopen = () => {
|
||||
sock.send(JSON.stringify({
|
||||
operation: 'subscribe',
|
||||
request_id: Math.random().toString(16).substring(2),
|
||||
credential: document.cookie.split('sid=')[1].split(';')[0],
|
||||
channels: ['message'],
|
||||
}));
|
||||
};
|
||||
sock.onmessage = async (message) => {
|
||||
const payload = JSON.parse(message.data);
|
||||
masterChannel.postMessage({ type: 'message', payload });
|
||||
|
||||
Reference in new issue
Block a user