Skip to content

Commit

Permalink
initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
epmiller8464 committed Mar 4, 2016
1 parent 824b6fb commit 6bb273b
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 13 deletions.
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
### Example user template template
### Example user template

# IntelliJ project files
.idea
*.iml
out
gen
# Created by .ignore support plugin (hsz.mobi)
99 changes: 99 additions & 0 deletions RoomServer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
/**
* Created by ghostmac on 3/3/16.
*/

module.exports = exports = IoServer;

function IoServer(http) {
var io = require('socket.io').listen(http, {
log: false,
origins: '*:*'
});

io.set('transports', [
'websocket', // 'disconnect' EVENT will work only with 'websocket'
'xhr-polling',
'jsonp-polling'
]);

var listOfBroadcasts = {};

io.on('connection', function(socket) {
var currentUser;
var sessionId = uuid.v4()

socket.on('join-broadcast', function(user) {
currentUser = user;

user.numberOfViewers = 0;
if (!listOfBroadcasts[user.broadcastid]) {
listOfBroadcasts[user.broadcastid] = {
broadcasters: {},
allusers: {},
typeOfStreams: user.typeOfStreams // object-booleans: audio, video, screen
};
}

var firstAvailableBroadcaster = getFirstAvailableBraodcater(user);
if (firstAvailableBroadcaster) {
listOfBroadcasts[user.broadcastid].broadcasters[firstAvailableBroadcaster.userid].numberOfViewers++;
socket.emit('join-broadcaster', firstAvailableBroadcaster, listOfBroadcasts[user.broadcastid].typeOfStreams);

console.log('User <', user.userid, '> is trying to get stream from user <', firstAvailableBroadcaster.userid, '>');
} else {
currentUser.isInitiator = true;
socket.emit('start-broadcasting', listOfBroadcasts[user.broadcastid].typeOfStreams);

console.log('User <', user.userid, '> will be next to serve broadcast.');
}

listOfBroadcasts[user.broadcastid].broadcasters[user.userid] = user;
listOfBroadcasts[user.broadcastid].allusers[user.userid] = user;
});

socket.on('message', function(message) {
socket.broadcast.emit('message', message);
});

socket.on('disconnect', function() {
if (!currentUser) return;
if (!listOfBroadcasts[currentUser.broadcastid]) return;
if (!listOfBroadcasts[currentUser.broadcastid].broadcasters[currentUser.userid]) return;

delete listOfBroadcasts[currentUser.broadcastid].broadcasters[currentUser.userid];
if (currentUser.isInitiator) {
delete listOfBroadcasts[currentUser.broadcastid];
}
});
//console.log(util.inspect(socket))
console.log('connected to ws server - session: %s', sessionId);
socket.on('error', function (error) {
console.log('Error: ' + error);
});

socket.on('close', function () {
console.log('Connection closing: ' + sessionId + ' closed');
});

socket.on('message', function (_message) {
var message = JSON.parse(_message);
console.log('Connection ' + sessionId + ' received message ', message);
var jsonRpc = message

//roomServer.roomHandler.handleRequest()

})
});

function getFirstAvailableBraodcater(user) {
var broadcasters = listOfBroadcasts[user.broadcastid].broadcasters;
var firstResult;
for (var userid in broadcasters) {
if (broadcasters[userid].numberOfViewers <= 3) {
firstResult = broadcasters[userid];
continue;
} else delete listOfBroadcasts[user.broadcastid].broadcasters[userid];
}
return firstResult;
}
}
76 changes: 67 additions & 9 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,16 @@ var http = require('http').Server(app);
var opts = {
transports: [
'websocket',
//'xhr-polling',
//'jsonp-polling'
]
//,log: true
//,origins: '*:*'
}

var io = require('socket.io')(http);
'polling',
'xhr-polling',
'jsonp-polling'
],
log: true,
origins: '*:*'
};
var sio = require('socket.io')
//var io = require('socket.io')(http,opts);
var io = sio(http, opts)

app.get('/', function (req, res) {
res.sendFile(__dirname + '/static/index.html');
Expand All @@ -29,11 +31,67 @@ http.listen(3000, function () {
console.log('listening on *:3000');
});
app.use(express.static(path.join(__dirname, 'static')));

var channels = {}
io.on('connection', function (socket) {
console.log('a user connected');
var initiatorChannel = '';
if (!io.isConnected) {
io.isConnected = true;
}

socket.on('new-channel', function (data) {
console.log(data)
//if (!channels[data.channel]) {
// initiatorChannel = data.channel;
//}
//
//channels[data.channel] = data.channel;
//onNewNamespace(data.channel, data.sender);
data.joined = true
socket.emit('joined-channel', data);
});

socket.on('presence', function (channel) {
var isChannelPresent = !!channels[channel];
socket.emit('presence', isChannelPresent);
});
socket.on('message', function (channel) {
if (initiatorChannel) {
delete channels[initiatorChannel];
}
});
socket.on('disconnect', function (channel) {
if (initiatorChannel) {
delete channels[initiatorChannel];
}
});
});

function onNewNamespace(channel, sender) {
io.of('/' + channel).on('connection', function (socket) {
var username;
if (io.isConnected) {
io.isConnected = false;
socket.emit('connect', true);
}

socket.on('message', function (data) {
if (data.sender == sender) {
if (!username) username = data.data.sender;

socket.broadcast.emit('message', data.data);
}
});

socket.on('disconnect', function () {
if (username) {
socket.broadcast.emit('user-left', username);
username = null;
}
});
});
}

////var express = require('express');
////var io = require('socket.io')
//var bodyParser = require('body-parser');
Expand Down
24 changes: 20 additions & 4 deletions static/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -100,14 +100,30 @@
// room = kurento.Room(roomOptions)
// })
console.log(location.host)
var socket = io('http://' + location.host);
// socket.on('connect', function(){});
// socket.on('event', function(data){});
// socket.on('disconnect', function(){});
// var socket = new WebSocket('ws://' + location.host);
var socket = io('ws://' + location.host);
socket.on('connect', function () {
console.log('connected to socket')
socket.on('joined-channel', function (data) {
console.log(data)
})
socket.emit('new-channel', {my: 'clientxyz'});

});
// socket.on('event', function (data) {
// console.log('connected to socket')
// });
socket.on('disconnect', function () {
console.log('disconnect from socket')
});
socket.on('open', function () {
console.log('open to socket')
socket.on('message', function (data) {
console.log('message on socket')

});
socket.on('close', function () {
console.log('socket closed')
});
});
})
Expand Down

0 comments on commit 6bb273b

Please sign in to comment.