implemented ending call functionality
Signed-off-by: heyhiru <hirentimbadiya74@gmail.com>
Este commit está contenido en:
@@ -10,6 +10,7 @@ const RoomPage = () => {
|
|||||||
const [remoteStream, setRemoteStream] = useState(null);
|
const [remoteStream, setRemoteStream] = useState(null);
|
||||||
const [isAudioMute, setIsAudioMute] = useState(false);
|
const [isAudioMute, setIsAudioMute] = useState(false);
|
||||||
const [isVideoOnHold, setIsVideoOnHold] = useState(false);
|
const [isVideoOnHold, setIsVideoOnHold] = useState(false);
|
||||||
|
const [callButton, setCallButton] = useState(true);
|
||||||
|
|
||||||
const handleUserJoined = useCallback(({ email, id }) => {
|
const handleUserJoined = useCallback(({ email, id }) => {
|
||||||
//! console.log(`Email ${email} joined the room!`);
|
//! console.log(`Email ${email} joined the room!`);
|
||||||
@@ -98,6 +99,33 @@ const RoomPage = () => {
|
|||||||
handleNegoFinal
|
handleNegoFinal
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
socket.on("call:end", ({ from }) => {
|
||||||
|
if (from === remoteSocketId) {
|
||||||
|
peer.peer.close();
|
||||||
|
|
||||||
|
if (myStream) {
|
||||||
|
myStream.getTracks().forEach(track => track.stop());
|
||||||
|
setMyStream(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
setRemoteStream(null);
|
||||||
|
setRemoteSocketId(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [remoteSocketId, myStream, socket]);
|
||||||
|
|
||||||
|
//* for disappearing call button
|
||||||
|
useEffect(() => {
|
||||||
|
socket.on("call:initiated", ({ from }) => {
|
||||||
|
if (from === remoteSocketId) {
|
||||||
|
setCallButton(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, [socket, remoteSocketId]);
|
||||||
|
|
||||||
|
|
||||||
const handleCallUser = useCallback(async () => {
|
const handleCallUser = useCallback(async () => {
|
||||||
const stream = await navigator.mediaDevices.getUserMedia({
|
const stream = await navigator.mediaDevices.getUserMedia({
|
||||||
audio: true,
|
audio: true,
|
||||||
@@ -109,8 +137,8 @@ const RoomPage = () => {
|
|||||||
audioTracks.forEach(track => track.enabled = false);
|
audioTracks.forEach(track => track.enabled = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
const videoTracks = stream.getVideoTracks();
|
|
||||||
if (isVideoOnHold) {
|
if (isVideoOnHold) {
|
||||||
|
const videoTracks = stream.getVideoTracks();
|
||||||
videoTracks.forEach(track => track.enabled = false);
|
videoTracks.forEach(track => track.enabled = false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,7 +148,12 @@ const RoomPage = () => {
|
|||||||
socket.emit("user:call", { to: remoteSocketId, offer })
|
socket.emit("user:call", { to: remoteSocketId, offer })
|
||||||
// set my stream
|
// set my stream
|
||||||
setMyStream(stream);
|
setMyStream(stream);
|
||||||
}, [remoteSocketId, socket, isAudioMute, isVideoOnHold]);
|
|
||||||
|
// hide the call button
|
||||||
|
setCallButton(false);
|
||||||
|
// Inform the remote user to hide their "CALL" button
|
||||||
|
socket.emit("call:initiated", { to: remoteSocketId });
|
||||||
|
}, [remoteSocketId, socket, isAudioMute, isVideoOnHold, callButton]);
|
||||||
|
|
||||||
|
|
||||||
const handleToggleAudio = () => {
|
const handleToggleAudio = () => {
|
||||||
@@ -133,8 +166,24 @@ const RoomPage = () => {
|
|||||||
setIsVideoOnHold(!isVideoOnHold);
|
setIsVideoOnHold(!isVideoOnHold);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const handleEndCall = useCallback(() => {
|
||||||
|
peer.peer.close();
|
||||||
|
|
||||||
|
if (myStream) {
|
||||||
|
myStream.getTracks().forEach(track => track.stop());
|
||||||
|
setMyStream(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
setRemoteStream(null);
|
||||||
|
|
||||||
|
if (remoteSocketId) {
|
||||||
|
socket.emit("call:end", { to: remoteSocketId });
|
||||||
|
}
|
||||||
|
setRemoteSocketId(null);
|
||||||
|
}, [myStream, remoteSocketId, socket]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='flex flex-col items-center justify-center'>
|
<div className='flex flex-col items-center justify-center h-screen'>
|
||||||
<h1 className='font-bold text-7xl md:text-5xl p-3'>RoomPage</h1>
|
<h1 className='font-bold text-7xl md:text-5xl p-3'>RoomPage</h1>
|
||||||
<h4 className='font-bold text-4xl md:text-xl p-3 mb-4'>{remoteSocketId ? "Connected" : "No One In Room"}</h4>
|
<h4 className='font-bold text-4xl md:text-xl p-3 mb-4'>{remoteSocketId ? "Connected" : "No One In Room"}</h4>
|
||||||
{(myStream || remoteStream) &&
|
{(myStream || remoteStream) &&
|
||||||
@@ -142,12 +191,12 @@ const RoomPage = () => {
|
|||||||
Send Stream
|
Send Stream
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
{remoteSocketId &&
|
{(remoteSocketId && callButton) &&
|
||||||
<button className='callButton' onClick={handleCallUser}>
|
<button className='callButton' onClick={handleCallUser}>
|
||||||
CALL
|
CALL
|
||||||
</button>
|
</button>
|
||||||
}
|
}
|
||||||
<div className="flex flex-row items-center justify-center">
|
<div className="flex flex-row items-center justify-center space-x-4 mt-4">
|
||||||
{
|
{
|
||||||
myStream &&
|
myStream &&
|
||||||
<div className='flex flex-col items-center justify-center'>
|
<div className='flex flex-col items-center justify-center'>
|
||||||
@@ -161,12 +210,17 @@ const RoomPage = () => {
|
|||||||
height={300}
|
height={300}
|
||||||
width={500}
|
width={500}
|
||||||
/>
|
/>
|
||||||
|
<div className='flex space-x-4 mt-4'>
|
||||||
<button className='joinButton' onClick={handleToggleAudio}>
|
<button className='joinButton' onClick={handleToggleAudio}>
|
||||||
{isAudioMute ? "Unmute" : "Mute"}
|
{isAudioMute ? "Unmute" : "Mute"}
|
||||||
</button>
|
</button>
|
||||||
<button className='joinButton' onClick={handleToggleVideo}>
|
<button className='joinButton' onClick={handleToggleVideo}>
|
||||||
{isVideoOnHold ? "Resume Video" : "Hold Video"}
|
{isVideoOnHold ? "Resume Video" : "Hold Video"}
|
||||||
</button>
|
</button>
|
||||||
|
<button className='joinButton' onClick={handleEndCall}>
|
||||||
|
End Call
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -40,4 +40,11 @@ io.on("connection", (socket) => {
|
|||||||
io.to(to).emit("peer:nego:final", { from: socket.id, ans });
|
io.to(to).emit("peer:nego:final", { from: socket.id, ans });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("call:end", ({ to }) => {
|
||||||
|
io.to(to).emit("call:end", { from: socket.id });
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("call:initiated", ({ to }) => {
|
||||||
|
io.to(to).emit("call:initiated", { from: socket.id });
|
||||||
|
});
|
||||||
})
|
})
|
||||||
Referencia en una nueva incidencia
Block a user