UNPKG

janky

Version:

Janus Interface

49 lines (40 loc) 1.75 kB
import { JanusJS } from "janus-gateway"; import { useEffect, useRef, useState } from "react" import eventEmitter from "./eventEmitter"; import { LOCAL_EVENTS } from "../events"; const useLocalRTC = () => { const [handler, setHandler] = useState<JanusJS.PluginHandle | null>(null); const localStream = useRef<MediaStream | null>(new MediaStream()); const [updater, setUpdater] = useState<boolean>(true); useEffect(() => { const handleGettingHandler = (handler: JanusJS.PluginHandle) => { setHandler(handler); }; if(eventEmitter.listeners(LOCAL_EVENTS.HANDLER)) { eventEmitter.on(LOCAL_EVENTS.HANDLER, handleGettingHandler); } const gettingNewTrack = (track: MediaStreamTrack, on: boolean) => { if(!localStream.current) { localStream.current = new MediaStream(); } on ? localStream.current.addTrack(track) : localStream.current.removeTrack(track); setUpdater(!updater); }; if(eventEmitter.listeners(LOCAL_EVENTS.LOCAL_TRACK)) { eventEmitter.on(LOCAL_EVENTS.LOCAL_TRACK, gettingNewTrack); } const resetLocalStream = () => { localStream.current = null; setUpdater(!updater); }; if(eventEmitter.listeners(LOCAL_EVENTS.NULL_STREAM)) { eventEmitter.on(LOCAL_EVENTS.NULL_STREAM, resetLocalStream); } return () => { eventEmitter.off(LOCAL_EVENTS.HANDLER, handleGettingHandler); eventEmitter.off(LOCAL_EVENTS.LOCAL_TRACK, gettingNewTrack); }; }, []); return { handler, localStream: localStream.current}; }; export default useLocalRTC;