mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-13 21:05:19 +00:00
fix: reduce error message (#1254)
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
|
||||
import { BlockSuiteWorkspace, BroadCastChannelProvider } from '../../../shared';
|
||||
import {
|
||||
AwarenessChanges,
|
||||
BroadcastChannelMessageEvent,
|
||||
getClients,
|
||||
TypedBroadcastChannel,
|
||||
@@ -27,13 +28,15 @@ export const createBroadCastChannelProvider = (
|
||||
switch (eventName) {
|
||||
case 'doc:diff': {
|
||||
const [, diff, clientId] = event.data;
|
||||
const updateV2 = Y.encodeStateAsUpdateV2(doc, diff);
|
||||
broadcastChannel!.postMessage(['doc:update', updateV2, clientId]);
|
||||
const update = Y.encodeStateAsUpdate(doc, diff);
|
||||
broadcastChannel!.postMessage(['doc:update', update, clientId]);
|
||||
break;
|
||||
}
|
||||
case 'doc:update': {
|
||||
const [, updateV2, clientId] = event.data;
|
||||
Y.applyUpdateV2(doc, updateV2, clientId);
|
||||
const [, update, clientId] = event.data;
|
||||
if (!clientId || clientId === awareness.clientID) {
|
||||
Y.applyUpdate(doc, update, broadcastChannel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'awareness:query': {
|
||||
@@ -45,11 +48,31 @@ export const createBroadCastChannelProvider = (
|
||||
}
|
||||
case 'awareness:update': {
|
||||
const [, update, clientId] = event.data;
|
||||
applyAwarenessUpdate(awareness, update, clientId);
|
||||
if (!clientId || clientId === awareness.clientID) {
|
||||
applyAwarenessUpdate(awareness, update, broadcastChannel);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
const handleDocUpdate = (updateV1: Uint8Array, origin: any) => {
|
||||
if (origin === broadcastChannel) {
|
||||
// not self update, ignore
|
||||
return;
|
||||
}
|
||||
broadcastChannel?.postMessage(['doc:update', updateV1]);
|
||||
};
|
||||
const handleAwarenessUpdate = (changes: AwarenessChanges, origin: any) => {
|
||||
if (origin === broadcastChannel) {
|
||||
return;
|
||||
}
|
||||
const changedClients = Object.values(changes).reduce((res, cur) => [
|
||||
...res,
|
||||
...cur,
|
||||
]);
|
||||
const update = encodeAwarenessUpdate(awareness, changedClients);
|
||||
broadcastChannel?.postMessage(['awareness:update', update]);
|
||||
};
|
||||
return {
|
||||
flavour: 'broadcast-channel',
|
||||
connect: () => {
|
||||
@@ -60,31 +83,30 @@ export const createBroadCastChannelProvider = (
|
||||
onmessage: handleBroadcastChannelMessage,
|
||||
}
|
||||
);
|
||||
console.log('connect broadcast channel', blockSuiteWorkspace.room);
|
||||
const docDiff = Y.encodeStateVector(doc);
|
||||
broadcastChannel.postMessage(['doc:diff', docDiff, awareness.clientID]);
|
||||
const docUpdateV2 = Y.encodeStateAsUpdateV2(doc);
|
||||
const docUpdateV2 = Y.encodeStateAsUpdate(doc);
|
||||
broadcastChannel.postMessage(['doc:update', docUpdateV2]);
|
||||
broadcastChannel.postMessage(['awareness:query', awareness.clientID]);
|
||||
const awarenessUpdate = encodeAwarenessUpdate(awareness, [
|
||||
awareness.clientID,
|
||||
]);
|
||||
broadcastChannel.postMessage(['awareness:update', awarenessUpdate]);
|
||||
const handleDocUpdate = (updateV1: Uint8Array, origin: any) => {
|
||||
if (origin !== awareness.clientID) {
|
||||
// not self update, ignore
|
||||
return;
|
||||
}
|
||||
const updateV2 = Y.convertUpdateFormatV1ToV2(updateV1);
|
||||
broadcastChannel?.postMessage(['doc:update', updateV2]);
|
||||
};
|
||||
doc.on('update', handleDocUpdate);
|
||||
awareness.on('update', handleAwarenessUpdate);
|
||||
},
|
||||
disconnect: () => {
|
||||
assertExists(broadcastChannel);
|
||||
console.log('disconnect broadcast channel', blockSuiteWorkspace.room);
|
||||
doc.off('update', handleDocUpdate);
|
||||
awareness.off('update', handleAwarenessUpdate);
|
||||
broadcastChannel.close();
|
||||
},
|
||||
cleanup: () => {
|
||||
assertExists(broadcastChannel);
|
||||
doc.off('update', handleDocUpdate);
|
||||
awareness.off('update', handleAwarenessUpdate);
|
||||
broadcastChannel.close();
|
||||
},
|
||||
};
|
||||
|
||||
@@ -71,6 +71,11 @@ export type BroadcastChannelMessageData<
|
||||
export type BroadcastChannelMessageEvent =
|
||||
MessageEvent<BroadcastChannelMessageData>;
|
||||
|
||||
export type AwarenessChanges = Record<
|
||||
'added' | 'updated' | 'removed',
|
||||
ClientId[]
|
||||
>;
|
||||
|
||||
export interface TypedBroadcastChannel extends BroadcastChannel {
|
||||
onmessage: ((event: BroadcastChannelMessageEvent) => void) | null;
|
||||
postMessage: (message: BroadcastChannelMessageData) => void;
|
||||
|
||||
Reference in New Issue
Block a user