Spaces:
Running
Running
| import Appointment from "../models/appointmentModel.js"; | |
| const videoCallSocket = (io) => { | |
| io.on('connection', (socket) => { | |
| console.log('A user connected'); | |
| // Handle the join-call event | |
| socket.on('join-call', async ({ appointmentId, role }) => { | |
| console.log(`User with role ${role} is joining call for appointment ${appointmentId}`); | |
| const appointment = await Appointment.findById(appointmentId).populate('farmerId expertId'); | |
| if (!appointment) { | |
| console.log(`Appointment not found: ${appointmentId}`); | |
| return; | |
| } | |
| if (role === 'farmer') { | |
| io.to(appointment.expertId.socketId).emit('join-call', { | |
| appointmentId, | |
| role: 'expert', | |
| message: 'Farmer is ready to join the call!', | |
| }); | |
| socket.join(appointmentId); // Join the socket room | |
| } else if (role === 'expert') { | |
| io.to(appointment.farmerId.socketId).emit('join-call', { | |
| appointmentId, | |
| role: 'farmer', | |
| message: 'Expert is ready to join the call!', | |
| }); | |
| socket.join(appointmentId); // Join the socket room | |
| } | |
| }); | |
| // Handle the video call offer (from farmer to expert) | |
| socket.on('video-call-offer', (offerData) => { | |
| const { appointmentId, offer, role } = offerData; | |
| const targetRole = role === 'farmer' ? 'expert' : 'farmer'; | |
| // Send the offer to the other user (expert or farmer) | |
| io.to(appointmentId).emit('video-call-offer', { | |
| offer, | |
| appointmentId, | |
| role: targetRole, | |
| }); | |
| }); | |
| // Handle the video call answer (from expert to farmer) | |
| socket.on('video-call-answer', (answerData) => { | |
| const { appointmentId, answer, role } = answerData; | |
| const targetRole = role === 'farmer' ? 'expert' : 'farmer'; | |
| // Send the answer to the other user (expert or farmer) | |
| io.to(appointmentId).emit('video-call-answer', { | |
| answer, | |
| appointmentId, | |
| role: targetRole, | |
| }); | |
| }); | |
| // Handle ICE candidates | |
| socket.on('ice-candidate', (candidateData) => { | |
| const { appointmentId, candidate, role } = candidateData; | |
| const targetRole = role === 'farmer' ? 'expert' : 'farmer'; | |
| // Send the ICE candidate to the other user (expert or farmer) | |
| io.to(appointmentId).emit('ice-candidate', { | |
| candidate, | |
| appointmentId, | |
| role: targetRole, | |
| }); | |
| }); | |
| // Handle disconnect event | |
| socket.on('disconnect', () => { | |
| console.log('User disconnected'); | |
| }); | |
| }); | |
| }; | |
| export default videoCallSocket; | |