From 723427b7ccd41b58480572e958791a3411041a19 Mon Sep 17 00:00:00 2001 From: talksik Date: Sat, 14 May 2022 11:08:37 -0500 Subject: [PATCH] cleaning up tuning and untuning keeping it simple --- packages/api/sockets/index.ts | 12 ++++++-- packages/core/sockets/channels.ts | 4 +-- .../src/providers/RealTimeRoomProvider.tsx | 30 ++++++++++++------- 3 files changed, 32 insertions(+), 14 deletions(-) diff --git a/packages/api/sockets/index.ts b/packages/api/sockets/index.ts index 8739490..9d92537 100644 --- a/packages/api/sockets/index.ts +++ b/packages/api/sockets/index.ts @@ -85,9 +85,13 @@ export default function InitializeWs(io: any) { const roomName = `connectedLine:${req.lineId}`; socket.join(roomName); + const clientUserIdsInRoom = [...(io.sockets.adapter.rooms.get(roomName) ?? [])].map( + (otherUserSocketId: string) => socketIdsToUserIds[otherUserSocketId], + ); + io.in(roomName).emit( ServerResponseChannels.SOMEONE_CONNECTED_TO_LINE, - new SomeoneConnectedResponse(req.lineId, userInfo.userId), + new SomeoneConnectedResponse(req.lineId, userInfo.userId, clientUserIdsInRoom), ); }); @@ -98,12 +102,16 @@ export default function InitializeWs(io: any) { const roomName = `tunedLine:${req.lineId}`; socket.join(roomName); + const clientUserIdsInRoom = [...(io.sockets.adapter.rooms.get(roomName) ?? [])].map( + (otherUserSocketId: string) => socketIdsToUserIds[otherUserSocketId], + ); + // we want to notify everyone connected to the line even if they are not tuned in const connectedLineRoomName = `connectedLine:${req.lineId}`; io.in(connectedLineRoomName).emit( ServerResponseChannels.SOMEONE_TUNED_INTO_LINE, - new SomeoneTunedResponse(req.lineId, userInfo.userId), + new SomeoneTunedResponse(req.lineId, userInfo.userId, clientUserIdsInRoom), ); }); diff --git a/packages/core/sockets/channels.ts b/packages/core/sockets/channels.ts index 1c8fbac..ead5980 100644 --- a/packages/core/sockets/channels.ts +++ b/packages/core/sockets/channels.ts @@ -71,7 +71,7 @@ export class ConnectToLineRequest { constructor(public lineId: string) {} } export class SomeoneConnectedResponse { - constructor(public lineId: string, public userId: string) {} + constructor(public lineId: string, public userId: string, public allUsers: string[]) {} } export class SomeoneDisconnectedResponse { @@ -81,7 +81,7 @@ export class TuneToLineRequest { constructor(public lineId: string) {} } export class SomeoneTunedResponse { - constructor(public lineId: string, public userId: string) {} + constructor(public lineId: string, public userId: string, public allUsers: string[]) {} } export class UntuneFromLineRequest { constructor(public lineId: string) {} diff --git a/packages/desktop/src/providers/RealTimeRoomProvider.tsx b/packages/desktop/src/providers/RealTimeRoomProvider.tsx index 4e97d43..9c61982 100644 --- a/packages/desktop/src/providers/RealTimeRoomProvider.tsx +++ b/packages/desktop/src/providers/RealTimeRoomProvider.tsx @@ -25,11 +25,29 @@ import { useAsyncFn } from 'react-use'; import { updateLineMemberState } from '../api/NirvanaApi'; import UpdateLineMemberState from '@nirvana/core/requests/updateLineMemberState.request'; import useAuth from './AuthProvider'; +import { User } from '@nirvana/core/models/user.model'; type LineIdToMasterLine = { [lineId: string]: MasterLineData; }; +// TODO: implement the below to save renders +type TunedMembersMap = { + [lineId: string]: string[]; +}; + +type ConnectedMembesMap = { + [lineId: string]: string[]; +}; + +type UserMap = { + [userId: string]: User; +}; + +type BroadcastersMap = { + [lineId: string]: string[]; +}; + interface IRealTimeRoomProvider { roomsMap: LineIdToMasterLine; @@ -103,11 +121,7 @@ export function RealTimeRoomProvider({ children }: { children: React.ReactChild return; } - if (draft[res.lineId].connectedMemberIds) { - draft[res.lineId].connectedMemberIds.push(res.userId); - } else { - draft[res.lineId].connectedMemberIds = [res.userId]; - } + draft[res.lineId].connectedMemberIds = res.allUsers; }); }); @@ -121,11 +135,7 @@ export function RealTimeRoomProvider({ children }: { children: React.ReactChild return; } - if (draft[res.lineId].tunedInMemberIds) { - draft[res.lineId].tunedInMemberIds.push(res.userId); - } else { - draft[res.lineId].tunedInMemberIds = [res.userId]; - } + draft[res.lineId].tunedInMemberIds = res.allUsers; }); });