var clients = io.sockets.adapter.rooms[room]; var numClients = typeof clients !== "undefined" ? clients.length : 0; if (numClients === 0) {
// ------------------------------------------------------------------------ // ------------------------------------------------------------------------ // ------------------------- Socket Functions ----------------------------- // ------------------------------------------------------------------------ // Play video socket.on('play video', function(data) { var roomnum = data.room io.sockets.in("room-" + roomnum).emit('playVideoClient'); });
// This just calls the syncHost function socket.on('sync host', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { //socket.broadcast.to(host).emit('syncVideoClient', { time: time, state: state, videoId: videoId }); var host = io.sockets.adapter.rooms['room-' + socket.roomnum].host // If not host, recall it on host if (socket.id != host) { socket.broadcast.to(host).emit('getData') } else { socket.emit('syncHost') } } })
// Send Message in chat socket.on('send message', function(data) { var encodedMsg = data.replace(/</g, "<").replace(/>/g, ">"); // console.log(data); io.sockets.in("room-" + socket.roomnum).emit('new message', { msg: encodedMsg, user: socket.username }); });
// Remove a specific video from queue socket.on('remove at', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var idx = data.idx switch (io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer) { case 0: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.yt.splice(idx, 1) break; case 1: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.dm.splice(idx, 1) break; case 2: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.vimeo.splice(idx, 1) break; case 3: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.html5.splice(idx, 1) break; default: console.log("Error invalid player id") } updateQueueVideos() } })
// Update the playlist/queue function updateQueueVideos() { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var vidlist = io.sockets.adapter.rooms['room-' + socket.roomnum].queue var currPlayer = io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer io.sockets.in("room-" + socket.roomnum).emit('get vidlist', { vidlist: vidlist, currPlayer: currPlayer, }) } }
// Get video id based on player socket.on('get video', function(callback) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { // Gets current video from room variable switch (io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer) { case 0: var currVideo = io.sockets.adapter.rooms['room-' + socket.roomnum].currVideo.yt break; case 1: var currVideo = io.sockets.adapter.rooms['room-' + socket.roomnum].currVideo.dm break; case 2: var currVideo = io.sockets.adapter.rooms['room-' + socket.roomnum].currVideo.vimeo break; case 3: var currVideo = io.sockets.adapter.rooms['room-' + socket.roomnum].currVideo.html5 break; default: console.log("Error invalid player id") } // Call back to return the video id callback(currVideo) } })
// Get host data socket.on('get host data', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var roomnum = data.room var host = io.sockets.adapter.rooms['room-' + roomnum].host // Broadcast to current host and set false // Call back not supported when broadcasting // Checks if it has the data, if not get the data and recursively call again if (data.currTime === undefined) { // Saves the original caller so the host can send back the data var caller = socket.id socket.broadcast.to(host).emit('getPlayerData', { room: roomnum, caller: caller }) } else { var caller = data.caller // Call necessary function on the original caller socket.broadcast.to(caller).emit('compareHost', data); } } })
if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { console.log(io.sockets.adapter.rooms['room-' + socket.roomnum]) var roomnum = data.room var newHost = socket.id var currHost = io.sockets.adapter.rooms['room-' + socket.roomnum].host io.sockets.adapter.rooms['room-' + socket.roomnum].host = newHost io.sockets.adapter.rooms['room-' + socket.roomnum].hostName = socket.username io.sockets.in("room-" + roomnum).emit('changeHostLabel', { username: socket.username })
// Sync video socket.on('sync video', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var roomnum = data.room var currTime = data.time var state = data.state var videoId = data.videoId var playerId = io.sockets.adapter.rooms['room-' + roomnum].currPlayer // var videoId = io.sockets.adapter.rooms['room-'+roomnum].currVideo io.sockets.in("room-" + roomnum).emit('syncVideoClient', { time: currTime, state: state, videoId: videoId, playerId: playerId }) } });
// Enqueue playlist // Gets all of the playlist videos and enqueues them // Only supported for YouTube socket.on('enqueue playlist', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var user = data.user var playlistId = data.playlistId switch (io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer) { case 0: // See yt.js file socket.emit('get playlist videos', { playlistId: playlistId, user: user, api_key: YT3_API_KEY }) break; case 1: break; case 2: break; case 3: break; default: console.log("Error invalid player id") } } })
// Change video player socket.on('change single player', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var playerId = data.playerId switch (playerId) { case 0: socket.emit('createYoutube', {}); break; case 1: socket.emit('createDaily', {}); break; case 2: socket.emit('createVimeo', {}); break; case 3: socket.emit('createHTML5', {}); break; default: console.log("Error invalid player id") } // After changing the player, resync with the host host = io.sockets.adapter.rooms['room-' + socket.roomnum].host socket.broadcast.to(host).emit('getData') } })
// Empty the queue socket.on('empty queue', function(data) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { switch (io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer) { case 0: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.yt = [] break; case 1: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.dm = [] break; case 2: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.vimeo = [] break; case 3: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.html5 = [] break; default: console.log("Error invalid player id") } updateQueueVideos() } })
// Play a specific video from queue socket.on('play at', function(data, callback) { if (io.sockets.adapter.rooms['room-' + socket.roomnum] !== undefined) { var idx = data.idx var videoId = "" switch (io.sockets.adapter.rooms['room-' + socket.roomnum].currPlayer) { case 0: videoId = io.sockets.adapter.rooms['room-' + socket.roomnum].queue.yt[idx].videoId io.sockets.adapter.rooms['room-' + socket.roomnum].queue.yt.splice(idx, 1) break; case 1: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.dm.splice(idx, 1) break; case 2: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.vimeo.splice(idx, 1) break; case 3: io.sockets.adapter.rooms['room-' + socket.roomnum].queue.html5.splice(idx, 1) break; default: console.log("Error invalid player id") } updateQueueVideos() callback({ videoId: videoId }) } })