Skip to content

Instantly share code, notes, and snippets.

@kpnemo
Created October 9, 2014 09:44
Show Gist options
  • Select an option

  • Save kpnemo/269a75b52a0f854adadd to your computer and use it in GitHub Desktop.

Select an option

Save kpnemo/269a75b52a0f854adadd to your computer and use it in GitHub Desktop.
var _ = require('lodash'),
users = require('../routes/user2'),
assets = require('../routes/assets'),
openTok = require('./opentok.wrapper'),
appEvents = require('./app_events'),
io = null,
rooms = {};
module.exports = {
init: function(_io){
if(_.isNull(io) && _io){
io = _io;
}
io.on('connection', function (socket) {
socket.on('openRoom', function(data){
console.log('SOCKET.IO: Client request to open room by accessToken', data);
if(!data.accessToken){
socket.emit('publicOnly');
} else {
users.getUserByAccessToken(data.accessToken, function(err, user){
if(!err){
socket.user_id = user.id;
socket.join('u_' + user.id);
socket.emit('roomCreated', {room: 'u_' + user.id});
socket.broadcast.to('u_' + user.id).emit('clientConnected', {accessToken: data.accessToken});
}
});
}
});
socket.on('watchAssets', function(data){
var ids = data.ids,
room = data.room;
if(ids && ids.length) {
console.log('SOCKET.IO: wathc ids', ids);
console.log('SOCKET.IO: room', room);
_.each(ids, function(assetId){
assets.watchAssetById(assetId, function(event, message){
io.sockets.in(room).emit(event, message);
});
});
} else {
return;
}
});
/**
* Recorder Events from web
*/
socket.on('isDeviceConnected', function(data){
var room = data.room;
console.log('isDeviceConnected: ' + JSON.stringify(data));
if(rooms[room] && _.size(rooms[room]) > 0 ){
io.sockets.socket(socket.id).emit('deviceConnected');
}
});
socket.on('startPreviewStream', function(data){
var room = data.room;
console.log('startPreviewStream: ' + JSON.stringify(data));
delete data.room;
if(!_.isString(data.streamId)){
data.streamId = data.streamId.toString();
}
openTok.createSesstion(function(err, sessionId){
socket.openTok_sessionId = sessionId;
openTok.createToken(socket.openTok_sessionId, function(sessionId, token){
socket.openTok_token = token;
data.openTok_sessionId = sessionId;
data.openTok_token = token;
console.log('startPreviewStream: ' + JSON.stringify(data));
socket.broadcast.to(room).emit('startPreviewStream', data);
});
});
});
socket.on('stopPreviewStream', function(data){
var room = data.room;
console.log('stopPreviewStream: ' + JSON.stringify(data));
delete data.room;
if(!_.isString(data.streamId)){
data.streamId = data.streamId.toString();
}
socket.broadcast.to(room).emit('stopPreviewStream', data);
});
socket.on('startRecord', function(data){
var room = data.room;
console.log('startRecord: ' + JSON.stringify(data));
delete data.room;
if(!_.isString(data.streamId)){
data.streamId = data.streamId.toString();
}
socket.broadcast.to(room).emit('startRecord', data);
});
socket.on('stopRecord', function(data){
var room = data.room;
console.log('stopRecord: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('stopRecord', data);
});
socket.on('cameraSwitch', function(data){
var room = data.room;
console.log('cameraSwitch: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('cameraSwitch', data);
});
socket.on('togglerFlash', function(data){
var room = data.room;
console.log('togglerFlash: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('togglerFlash', data);
});
socket.on('shootBG', function(data){
var room = data.room;
console.log('shootBG: ' + JSON.stringify(data));
delete data.room;
if(!_.isString(data.streamId)){
data.streamId = data.streamId.toString();
}
socket.broadcast.to(room).emit('shootBG', data);
});
socket.on('stopBG', function(data){
var room = data.room;
console.log('stopBG: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('stopBG', data);
});
socket.on('shootTalent', function(data){
var room = data.room;
console.log('shootTalent: ' + JSON.stringify(data));
delete data.room;
if(!_.isString(data.streamId)){
data.streamId = data.streamId.toString();
}
socket.broadcast.to(room).emit('shootTalent', data);
});
socket.on('stopTalent', function(data){
var room = data.room;
console.log('stopTalent: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('stopTalent', data);
});
socket.on('showMessage', function(data){
var room = data.room;
console.log('showMessage: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('showMessage', data);
});
socket.on('ping', function(data){
var room = data.room;
console.log('ping: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('ping', data);
});
socket.on('flowInterrupted', function(data){
var room = data.room;
console.log('flowInterrupted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('flowInterrupted', data);
});
socket.on('rescan', function(data){
var room = data.room;
console.log('rescan: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('rescan', data);
});
/**
* Recorder events from device
*/
socket.on('deviceConnected', function(data){
console.log('deviceConnected: ' + JSON.stringify(data));
var room = data.room;
delete data.room;
socket.broadcast.to(room).emit('deviceConnected', data);
var mapData = {
deviceId: data.deviceId || null,
deviceType: data.deviceType || null
};
// if(rooms[room]){
// rooms[room][socket.id] = mapData;
// } else {
// rooms[room] = {};
// rooms[room][socket.id] = mapData;
// }
console.log('added device to room', room);
socket.on('disconnect', function () {
//delete rooms[room][socket.id];
console.log('deviceDisconnected', socket.id, room);
io.sockets.in(room).emit('deviceDisconnected', data);
});
});
socket.on('qualityChanged', function(data){
var room = data.room;
console.log('qualityChanged: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('qualityChanged', data);
});
socket.on('backClicked', function(data){
var room = data.room;
console.log('backClicked: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('backClicked', data);
});
socket.on('appInterrupted', function(data){
var room = data.room;
console.log('appInterrupted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('appInterrupted', data);
//try to force client to disconnect
socket.emit('disconnect');
socket.disconnect();
});
socket.on('previewStreamStarted', function(data){
var room = data.room;
console.log('previewStreamStarted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('previewStreamStarted', data);
});
socket.on('BGrecordStarted', function(data){
var room = data.room;
console.log('BGrecordStarted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('BGrecordStarted', data);
});
socket.on('TalentRecordStarted', function(data){
var room = data.room;
console.log('TalentRecordStarted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('TalentRecordStarted', data);
});
socket.on('recordStarted', function(data){
var room = data.room;
console.log('recordStarted: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('recordStarted', data);
});
socket.on('recordStopped', function(data){
var room = data.room;
console.log('recordStopped: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('recordStopped', data);
});
socket.on('uploadInProgress', function(data){
var room = data.room;
console.log('uploadInProgress: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('uploadInProgress', data);
});
socket.on('uploadDone', function(data){
var room = data.room;
console.log('uploadDone: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('uploadDone', data);
});
socket.on('uploadDone', function(data){
var room = data.room;
console.log('uploadDone: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('uploadDone', data);
});
socket.on('pong', function(data){
var room = data.room;
console.log('pong: ' + JSON.stringify(data));
delete data.room;
socket.broadcast.to(room).emit('pong', data);
});
});
},
pushToPublic: function(event, message){
var _message = message || {},
_event = event || 'message';
console.log('socket.io to public', _event, JSON.stringify(_message).substr(500));
io.sockets.emit(_event, _message);
},
pushToUser: function(user_id, event, message){
var _message = message || {},
_event = event || 'message',
_u = user_id || null;
if(_u == null) return;
console.log('socket.io to user', _event, JSON.stringify(_message).substr(500));
io.sockets.in('u_' + user_id).emit(_event, _message);
},
pushFromUserToOthers: function(user_id, socketId, event, message){
var _message = message || {},
_event = event || 'message',
_u = user_id || null,
_socketId= socketId || null;
if (_u == null || _socketId == null) return;
//console.log('socket.io from user', _event, JSON.stringify(_message).substr(500));
var roomClients = io.sockets.clients('u_' + user_id);
_.each(roomClients, function(client, index){
if(client.id != _socketId) {
io.sockets.socket(client.id).emit(_event, _message);
}
});
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment