fix: reduce error message (#1254)

This commit is contained in:
Himself65
2023-03-02 01:11:36 -06:00
committed by GitHub
parent 68b33cbdbd
commit 855588ca8b
6 changed files with 49 additions and 22 deletions

View File

@@ -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();
},
};

View File

@@ -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;