Skip to content

Commit

Permalink
Fix end session
Browse files Browse the repository at this point in the history
  • Loading branch information
aaron7 committed Jun 15, 2024
1 parent df9b37e commit 27345f8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 37 deletions.
28 changes: 15 additions & 13 deletions app/src/hooks/webrtc.tsx
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
import { useEffect, useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { IndexeddbPersistence } from 'y-indexeddb';
import { type WebrtcProvider } from 'y-webrtc';
import { Doc } from 'yjs';

import { useSettings } from '@/providers/SettingsProvider';
import routes from '@/routes';
import {
createIndexedDbPersistence,
createWebrtcProvider,
findHostId,
setDocMapAndWaitForSync,
type AwarenessState,
type StatusEvent,
} from '@/utils/collab';
Expand Down Expand Up @@ -94,14 +91,13 @@ export const useCollabProvider = ({
}: UseCollabProviderProps) => {
const isHost = session.isHost;

const navigate = useNavigate();

const { settings } = useSettings();

const { awarenessStates, isConnected, webrtcProvider } = useWebrtcProvider({
session,
setValue,
});
const [isActive, setIsActive] = useState(true);

useEffect(() => {
webrtcProvider?.awareness.setLocalStateField('user', {
Expand All @@ -115,18 +111,24 @@ export const useCollabProvider = ({
if (!webrtcProvider) {
return;
}
setDocMapAndWaitForSync(webrtcProvider.doc, 'status', 'ended', true)
.then(() => {
navigate(routes.landing.path);
})
.catch((error) => {
// TODO: Handle error
});
webrtcProvider.doc.getMap('status').set('ended', true);
};

useEffect(() => {
if (!webrtcProvider) {
return;
}

const statusMap = webrtcProvider.doc.getMap('status');
statusMap.observe(() => {
if (statusMap.get('ended')) {
setIsActive(false);
}
});
}, [webrtcProvider, setIsActive]);

const hostId = findHostId(awarenessStates);
const isHostOnline = isHost || (hostId && awarenessStates.get(hostId));
const isActive = webrtcProvider?.doc.getMap('status').get('ended') || true;

return {
awarenessStates,
Expand Down
24 changes: 0 additions & 24 deletions app/src/utils/collab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,30 +86,6 @@ export const createIndexedDbPersistence = ({
return new IndexeddbPersistence(indexedDbKey, ydoc);
};

export function setDocMapAndWaitForSync<T>(
doc: Doc,
mapName: string,
key: string,
value: T,
): Promise<void> {
return new Promise((resolve, reject) => {
const updateHandler = () => {
doc.off('update', updateHandler);
resolve();
};

doc.on('update', updateHandler);
doc.getMap(mapName).set(key, value);

setTimeout(() => {
doc.off('update', updateHandler);
reject(new Error('Sync timeout'));
}, 5000);

updateHandler();
});
}

export function findHostId(awarenessState: AwarenessState) {
for (const [key, value] of awarenessState.entries()) {
if (value.user.isHost) {
Expand Down

0 comments on commit 27345f8

Please sign in to comment.