Skip to content

Commit 81f112a

Browse files
authored
Ensure room is never re-used (#168)
1 parent 302c6ae commit 81f112a

File tree

3 files changed

+11
-15
lines changed

3 files changed

+11
-15
lines changed

app/components/layout.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import useConnectionDetails from '@/hooks/useConnectionDetails';
1010
import { cn } from '@/lib/utils';
1111

1212
export default function ComponentsLayout({ children }: { children: React.ReactNode }) {
13-
const connectionDetails = useConnectionDetails();
13+
const { connectionDetails } = useConnectionDetails();
1414

1515
const pathname = usePathname();
1616
const room = React.useMemo(() => new Room(), []);

components/app.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ export function App({ appConfig }: AppProps) {
2828
suportsScreenShare,
2929
};
3030

31-
const connectionDetails = useConnectionDetails();
31+
const { connectionDetails, refreshConnectionDetails } = useConnectionDetails();
3232

3333
const room = React.useMemo(() => new Room(), []);
3434

3535
React.useEffect(() => {
3636
const onDisconnected = () => {
3737
setSessionStarted(false);
38+
refreshConnectionDetails();
3839
};
3940
const onMediaDevicesError = (error: Error) => {
4041
toastAlert({
@@ -48,7 +49,7 @@ export function App({ appConfig }: AppProps) {
4849
room.off(RoomEvent.Disconnected, onDisconnected);
4950
room.off(RoomEvent.MediaDevicesError, onMediaDevicesError);
5051
};
51-
}, [room]);
52+
}, [room, refreshConnectionDetails]);
5253

5354
React.useEffect(() => {
5455
if (sessionStarted && room.state === 'disconnected' && connectionDetails) {

hooks/useConnectionDetails.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { useEffect, useState } from 'react';
1+
import { useCallback, useEffect, useState } from 'react';
22
import { ConnectionDetails } from '@/app/api/connection-details/route';
33

4-
export default function useConnectionDetails(autoRefresh = false) {
4+
export default function useConnectionDetails() {
55
// Generate room connection details, including:
66
// - A random Room name
77
// - A random Participant name
@@ -13,7 +13,8 @@ export default function useConnectionDetails(autoRefresh = false) {
1313

1414
const [connectionDetails, setConnectionDetails] = useState<ConnectionDetails | null>(null);
1515

16-
const fetchConnectionDetails = () => {
16+
const fetchConnectionDetails = useCallback(() => {
17+
setConnectionDetails(null);
1718
const url = new URL(
1819
process.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT ?? '/api/connection-details',
1920
window.location.origin
@@ -27,17 +28,11 @@ export default function useConnectionDetails(autoRefresh = false) {
2728
console.error('Error fetching connection details:', error);
2829
alert(error.message);
2930
});
30-
};
31+
}, []);
3132

3233
useEffect(() => {
33-
if (autoRefresh) {
34-
const interval = setInterval(() => {
35-
fetchConnectionDetails();
36-
}, 10000);
37-
return () => clearInterval(interval);
38-
}
3934
fetchConnectionDetails();
40-
}, [autoRefresh]);
35+
}, [fetchConnectionDetails]);
4136

42-
return connectionDetails;
37+
return { connectionDetails, refreshConnectionDetails: fetchConnectionDetails };
4338
}

0 commit comments

Comments
 (0)