From 03c4ea3aaae248dfb63c1cac38e5672b75d4e399 Mon Sep 17 00:00:00 2001 From: talksik Date: Sat, 14 May 2022 11:23:11 -0500 Subject: [PATCH] start working on the streaming aspect --- .../src/providers/RealTimeRoomProvider.tsx | 1 + .../desktop/src/providers/StreamProvider.tsx | 45 +++++++++++++++++++ packages/desktop/src/tree/electronApp.tsx | 5 ++- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/packages/desktop/src/providers/RealTimeRoomProvider.tsx b/packages/desktop/src/providers/RealTimeRoomProvider.tsx index 9c61982..5efc237 100644 --- a/packages/desktop/src/providers/RealTimeRoomProvider.tsx +++ b/packages/desktop/src/providers/RealTimeRoomProvider.tsx @@ -110,6 +110,7 @@ export function RealTimeRoomProvider({ children }: { children: React.ReactChild const [moveLineState, moveLine] = useAsyncFn(updateLineMemberState); + /** All line listeners */ useEffect(() => { // when me or anyone just initially connects to line $ws.on(ServerResponseChannels.SOMEONE_CONNECTED_TO_LINE, (res: SomeoneConnectedResponse) => { diff --git a/packages/desktop/src/providers/StreamProvider.tsx b/packages/desktop/src/providers/StreamProvider.tsx index 83aa28f..c08e374 100644 --- a/packages/desktop/src/providers/StreamProvider.tsx +++ b/packages/desktop/src/providers/StreamProvider.tsx @@ -18,3 +18,48 @@ * * listen for any calls to me, as well as any answers back to me */ + +import React, { useEffect } from 'react'; +import Peer from 'simple-peer'; +import useRealTimeRooms from './RealTimeRoomProvider'; +import useAuth from './AuthProvider'; +import { useImmer } from 'use-immer'; + +type PeerMap = { + [userId: string]: Peer; +}; +interface IStreamProvider { + peerMap: PeerMap; +} + +const StreamProviderContext = React.createContext({ + peerMap: {}, +}); + +export function StreamProvider({ children }: { children: React.ReactChild }) { + const { roomsMap } = useRealTimeRooms(); + const { user } = useAuth(); + + const [peerMap, setPeerMap] = useImmer({}); + + useEffect(() => { + // get distinct peers that we need to build a connection with + const userIdsSet = new Set(); + + Object.values(roomsMap).forEach((line) => { + if (!line.tunedInMemberIds?.includes(user._id.toString())) { + return; + } + + line.tunedInMemberIds.forEach((tunedUserId) => userIdsSet.add(tunedUserId)); + }); + + console.log(userIdsSet); + + // go call all of them + }, [user, roomsMap]); + + return ( + {children} + ); +} diff --git a/packages/desktop/src/tree/electronApp.tsx b/packages/desktop/src/tree/electronApp.tsx index 4a587c2..5e44615 100644 --- a/packages/desktop/src/tree/electronApp.tsx +++ b/packages/desktop/src/tree/electronApp.tsx @@ -7,6 +7,7 @@ import { ElectronProvider } from '../providers/ElectronProvider'; import { SocketProvider } from '../providers/SocketProvider'; import ProtectedRoute from './protected/ProtectedRoute'; import Terminal from './protected/terminal/Terminal'; +import { StreamProvider } from '../providers/StreamProvider'; export default function ElectronApp() { return ( @@ -16,7 +17,9 @@ export default function ElectronApp() { - + + +