PageRenderTime 46ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/routes/socket.js

https://github.com/carlgrundberg/pivoter-angular
JavaScript | 74 lines | 61 code | 13 blank | 0 comment | 6 complexity | 0dc3547dda6ca67ae5514c0fe14e584d MD5 | raw file
  1. module.exports = function (io) {
  2. var state = {
  3. voters: {},
  4. total: 0,
  5. voted: 0
  6. };
  7. function total_voters() {
  8. return Object.keys(state.voters).length;
  9. }
  10. function num_voted() {
  11. var voted = 0;
  12. for (var i in state.voters) {
  13. if (state.voters[i] != null) {
  14. voted++;
  15. }
  16. }
  17. return voted;
  18. }
  19. function reset_state() {
  20. for (var i in state.voters) {
  21. state.voters[i] = null;
  22. }
  23. }
  24. function vote(id, value) {
  25. state.voters[id] = value;
  26. send_update();
  27. }
  28. function send_update(socket) {
  29. state.total = total_voters();
  30. state.voted = num_voted();
  31. if (socket) {
  32. console.log('sending update to socket ' + socket.id);
  33. socket.emit('update', state);
  34. } else {
  35. console.log('sending update to all');
  36. io.sockets.emit('update', state);
  37. }
  38. }
  39. io.sockets.on('connection', function (socket) {
  40. var address = socket.handshake.address;
  41. console.log("New connection from " + address.address + ":" + address.port + " (" + socket.handshake.headers.referer + ")");
  42. send_update(socket);
  43. socket.on('voter', function () {
  44. console.log('New voter');
  45. vote(socket.id, null);
  46. });
  47. socket.on('vote', function (data) {
  48. console.log('vote', data);
  49. vote(socket.id, data.value);
  50. });
  51. socket.on('reset', function () {
  52. console.log('reset');
  53. reset_state();
  54. send_update();
  55. });
  56. socket.on('disconnect', function () {
  57. delete state.voters[socket.id];
  58. send_update();
  59. });
  60. });
  61. };