server.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. source.emit('sink-connected', { 'sink': sink_id });
  32. fn({ 'id': sink_id });
  33. });
  34. // Offer from src to dest.
  35. socket.on('offer', function (msg) {
  36. console.log('OFFER MADE');
  37. sink = clients[msg.sink];
  38. sink.emit('offer', msg);
  39. });
  40. // Answer from dest to src.
  41. socket.on('answer', function (msg) {
  42. console.log('ANSWER MADE');
  43. source = clients[msg.source];
  44. // Add to list of successful connections.
  45. // May want to move this to another message soon.
  46. connections[msg.source].push(msg.sink);
  47. source.emit('answer', msg);
  48. });
  49. socket.on('disconnect', function() {
  50. // Handle on client side?
  51. socket.broadcast.to(connections[socket.id]).emit('Host disconnected');
  52. delete connections[socket.id];
  53. delete clients[socket.id];
  54. });
  55. socket.on('port', function(msg) {
  56. clients[msg.sink].emit('port', msg);
  57. });
  58. });
  59. app.get('/', function(req, res){
  60. res.render('index');
  61. });
  62. app.listen(process.env.PORT || 8000);