Add files via upload
This commit is contained in:
5 files changed
+1693
No files matched your search
@@ -0,0 +1,82 @@
|
||||
const express = require('express');
|
||||
const http = require('http');
|
||||
const { Server } = require('socket.io');
|
||||
|
||||
const app = express();
|
||||
const server = http.createServer(app);
|
||||
const io = new Server(server);
|
||||
|
||||
app.use(express.static('public'));
|
||||
|
||||
let textQueue = [];
|
||||
let videoQueue = [];
|
||||
let onlineUsers = 0;
|
||||
|
||||
io.on('connection', (socket) => {
|
||||
onlineUsers++;
|
||||
io.emit('update_count', onlineUsers);
|
||||
|
||||
socket.on('find_partner', ({ mode, interests }) => {
|
||||
socket.mode = mode; // 'text' or 'video'
|
||||
|
||||
// Simple Queue Logic
|
||||
let queue = mode === 'text' ? textQueue : videoQueue;
|
||||
|
||||
if (queue.length > 0) {
|
||||
// Match found!
|
||||
const partner = queue.pop();
|
||||
const roomId = `room_${socket.id}_${partner.id}`;
|
||||
|
||||
socket.join(roomId);
|
||||
partner.join(roomId);
|
||||
|
||||
// Notify both
|
||||
io.to(roomId).emit('match_found', { roomId });
|
||||
|
||||
// If video, tell them who is initiating
|
||||
if (mode === 'video') {
|
||||
socket.emit('make_offer', { roomId }); // One side starts WebRTC
|
||||
}
|
||||
} else {
|
||||
// No match, wait in queue
|
||||
queue.push(socket);
|
||||
socket.emit('waiting', { message: `Looking for a ${mode} partner...` });
|
||||
}
|
||||
});
|
||||
|
||||
// WebRTC Signaling (Video Mode)
|
||||
socket.on('signal', (data) => {
|
||||
socket.to(data.room).emit('signal', data);
|
||||
});
|
||||
|
||||
// Chat Messages
|
||||
socket.on('message', (data) => {
|
||||
socket.to(data.room).emit('message', {
|
||||
text: data.text,
|
||||
sender: 'stranger'
|
||||
});
|
||||
});
|
||||
|
||||
// Handle Stop/Disconnect
|
||||
socket.on('leave_room', (roomId) => {
|
||||
if(roomId) {
|
||||
socket.to(roomId).emit('partner_disconnected');
|
||||
socket.leave(roomId);
|
||||
}
|
||||
// Remove from queues if they were waiting
|
||||
textQueue = textQueue.filter(s => s.id !== socket.id);
|
||||
videoQueue = videoQueue.filter(s => s.id !== socket.id);
|
||||
});
|
||||
|
||||
socket.on('disconnect', () => {
|
||||
onlineUsers--;
|
||||
io.emit('update_count', onlineUsers);
|
||||
// Clean up queues
|
||||
textQueue = textQueue.filter(s => s.id !== socket.id);
|
||||
videoQueue = videoQueue.filter(s => s.id !== socket.id);
|
||||
});
|
||||
});
|
||||
|
||||
server.listen(3002, () => {
|
||||
console.log('Server running on http://localhost:3002');
|
||||
});
|
||||
Reference in new issue
Block a user