janky
Version:
Janus Interface
49 lines (40 loc) • 1.75 kB
text/typescript
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;