Skip to content

Commit b790461

Browse files
authored
Merge pull request #1103 from FaheemOnHub/add/errorCatch/RoomActivity
Add: null checks && readyState checks in roomActivity
2 parents c538987 + e565395 commit b790461

File tree

1 file changed

+67
-49
lines changed

1 file changed

+67
-49
lines changed

src/hooks/useRoomActivity.ts

Lines changed: 67 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ interface UserMapping {
4747
}
4848

4949
interface UseRoomActivityParams {
50-
provider_url: string;
51-
getUserProfile: () => Promise<{ data: UserProfile }>;
52-
getUserAccessToken: () => Promise<{ data: string }>;
50+
provider_url?: string;
51+
getUserProfile?: () => Promise<{ data: UserProfile }>;
52+
getUserAccessToken?: () => Promise<{ data: string }>;
5353
}
5454

5555
const SUBSCRIBE_TO_ROOMS_ACTIVITY_MSG: SubscribeToRoomsActivityMessage = {
@@ -136,57 +136,73 @@ const subscribeToRoomActivity = async (
136136
getUserProfile: () => Promise<{ data: UserProfile }>,
137137
getUserAccessToken: () => Promise<{ data: string }>
138138
): Promise<void> => {
139-
const config = await getCollaborationConfig({
140-
provider_url,
141-
getUserProfile,
142-
getUserAccessToken
143-
});
144-
145-
// Create the websocket connection with proper headers
146-
const ws = new WebSocket(config.signalingUrl[0], ['auth', config.authToken]);
147-
wsRef.current = ws;
148-
149-
ws.addEventListener('open', () => {
150-
console.log('[RoomActivity] connected to room activity');
151-
ws.send(JSON.stringify(SUBSCRIBE_TO_ROOMS_ACTIVITY_MSG));
152-
});
153-
154-
ws.addEventListener('message', (event: MessageEvent) => {
155-
console.log('[RoomActivity] new message', event);
156-
const data = JSON.parse(event.data) as UserMapChangeMessage;
157-
if (data.type === USER_MAP_CHANGE_MSG && data.user_map) {
158-
onUserMapChange(data.user_map);
159-
}
160-
});
139+
if (!provider_url || !getUserProfile || !getUserAccessToken) {
140+
console.warn('Missing required parameters for subscription');
141+
return;
142+
}
143+
144+
try {
145+
const config = await getCollaborationConfig({
146+
provider_url,
147+
getUserProfile,
148+
getUserAccessToken
149+
});
161150

162-
ws.addEventListener('close', () => {
163-
console.log('[RoomActivity] subscription to room activity closed');
164-
});
151+
// Create the websocket connection with proper headers
152+
const ws = new WebSocket(config.signalingUrl[0], ['auth', config.authToken]);
153+
wsRef.current = ws;
154+
155+
ws.addEventListener('open', () => {
156+
console.log('[RoomActivity] connected to room activity');
157+
if (ws.readyState === WebSocket.OPEN) {
158+
ws.send(JSON.stringify(SUBSCRIBE_TO_ROOMS_ACTIVITY_MSG));
159+
}
160+
});
165161

166-
ws.addEventListener('error', (err: Event) => {
167-
console.error('[RoomActivity] error in room activity subscription', err);
168-
});
162+
ws.addEventListener('message', (event: MessageEvent) => {
163+
console.log('[RoomActivity] new message', event);
164+
const data = JSON.parse(event.data) as UserMapChangeMessage;
165+
if (data.type === USER_MAP_CHANGE_MSG && data.user_map) {
166+
onUserMapChange(data.user_map);
167+
}
168+
});
169+
170+
ws.addEventListener('close', () => {
171+
console.log('[RoomActivity] subscription to room activity closed');
172+
});
173+
174+
ws.addEventListener('error', (err: Event) => {
175+
console.error('[RoomActivity] error in room activity subscription', err);
176+
});
177+
} catch (error) {
178+
console.error('[RoomActivity] Failed to subscribe to room activity:', error);
179+
}
169180
};
170181

171182
/**
172183
* Hook to subscribe to and get room activity data
173184
*/
174-
export const useRoomActivity = ({
175-
provider_url,
176-
getUserProfile,
177-
getUserAccessToken
178-
}: UseRoomActivityParams): [UserMapping, MutableRefObject<WebSocket | null>] => {
185+
export const useRoomActivity = (
186+
{
187+
provider_url,
188+
getUserProfile,
189+
getUserAccessToken
190+
}: UseRoomActivityParams = {} as UseRoomActivityParams
191+
): [UserMapping, MutableRefObject<WebSocket | null>] => {
179192
const [allRoomsUserMapping, setAllRoomsUserMapping] = useState<UserMapping>({});
180193
const wsRef = useRef<WebSocket | null>(null);
181194

182195
useEffect(() => {
183-
subscribeToRoomActivity(
184-
wsRef,
185-
setAllRoomsUserMapping,
186-
provider_url,
187-
getUserProfile,
188-
getUserAccessToken
189-
);
196+
// -> all parameters check
197+
if (provider_url && getUserProfile && getUserAccessToken) {
198+
subscribeToRoomActivity(
199+
wsRef,
200+
setAllRoomsUserMapping,
201+
provider_url,
202+
getUserProfile,
203+
getUserAccessToken
204+
);
205+
}
190206

191207
const ws = wsRef.current;
192208

@@ -202,12 +218,14 @@ export const useRoomActivity = ({
202218
};
203219

204220
export const subscribeToRoom = (ws: WebSocket, room: string) => {
205-
ws.send(
206-
JSON.stringify({
207-
type: 'subscribe',
208-
topic: room
209-
})
210-
);
221+
if (ws.readyState === WebSocket.OPEN) {
222+
ws.send(
223+
JSON.stringify({
224+
type: 'subscribe',
225+
topic: room
226+
})
227+
);
228+
}
211229
};
212230

213231
export const unSubscribeRoom = (ws: WebSocket, room: string) => {

0 commit comments

Comments
 (0)