server.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. var express = require('express');
  2. var fs = require('fs');
  3. var app = express.createServer();
  4. var io = require('socket.io').listen(app);
  5. // Initialize main server.
  6. app.use(express.bodyParser());
  7. app.use(express.static(__dirname + '/public'));
  8. app.set('view engine', 'ejs');
  9. app.set('views', __dirname + '/views');
  10. // P2P sources: { socket id => url }.
  11. sources = {};
  12. // socket.io clients.
  13. clients = {};
  14. // P2Ps. { source id => group members }
  15. connections = {};
  16. // For connecting clients:
  17. // Src will connect upon creating a link.
  18. // Receivers will connect after clicking a button and entering an optional key.
  19. io.sockets.on('connection', function(socket) {
  20. clients[socket.id] = socket;
  21. // Source connected.
  22. socket.on('source', function(fn) {
  23. fn({ 'id': socket.id });
  24. connections[socket.id] = [];
  25. });
  26. // Sink connected.
  27. socket.on('sink', function(msg, fn) {
  28. var source_id = msg.source;
  29. var sink_id = socket.id;
  30. var source = clients[source_id];
  31. if (!!source) {
  32. source.emit('sink-connected', { 'sink': sink_id });
  33. fn({ 'id': sink_id });
  34. } else {
  35. fn({ 'error': 'Source ID not found.' });
  36. };
  37. });
  38. // Offer from src to dest.
  39. socket.on('offer', function (msg) {
  40. console.log('OFFER MADE');
  41. sink = clients[msg.sink];
  42. sink.emit('offer', msg);
  43. });
  44. // Answer from dest to src.
  45. socket.on('answer', function (msg) {
  46. console.log('ANSWER MADE');
  47. source = clients[msg.source];
  48. // Add to list of successful connections.
  49. // May want to move this to another message soon.
  50. connections[msg.source].push(msg.sink);
  51. source.emit('answer', msg);
  52. });
  53. socket.on('disconnect', function() {
  54. // Handle on client side?
  55. socket.broadcast.to(connections[socket.id]).emit('Host disconnected');
  56. delete connections[socket.id];
  57. delete clients[socket.id];
  58. });
  59. socket.on('port', function(msg) {
  60. clients[msg.sink].emit('port', msg);
  61. });
  62. });
  63. app.get('/', function(req, res){
  64. res.render('index');
  65. });
  66. app.listen(process.env.PORT || 8000);