WebSocketService.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. var WebSocketService = function(model, webSocket) {
  2. var webSocketService = this;
  3. var webSocket = webSocket;
  4. var model = model;
  5. this.hasConnection = false;
  6. this.welcomeHandler = function(data) {
  7. webSocketService.hasConnection = true;
  8. model.userTadpole.id = data.id;
  9. model.tadpoles[data.id] = model.tadpoles[-1];
  10. delete model.tadpoles[-1];
  11. $('#chat').initChat();
  12. if($.cookie('todpole_name')) {
  13. webSocketService.sendMessage('name:'+$.cookie('todpole_name'));
  14. }
  15. };
  16. this.updateHandler = function(data) {
  17. var newtp = false;
  18. if(!model.tadpoles[data.id]) {
  19. newtp = true;
  20. model.tadpoles[data.id] = new Tadpole();
  21. model.arrows[data.id] = new Arrow(model.tadpoles[data.id], model.camera);
  22. }
  23. var tadpole = model.tadpoles[data.id];
  24. if(tadpole.id == model.userTadpole.id) {
  25. tadpole.name = data.name;
  26. return;
  27. } else {
  28. tadpole.name = data.name;
  29. }
  30. if(newtp) {
  31. tadpole.x = data.x;
  32. tadpole.y = data.y;
  33. } else {
  34. tadpole.targetX = data.x;
  35. tadpole.targetY = data.y;
  36. }
  37. tadpole.angle = data.angle;
  38. tadpole.momentum = data.momentum;
  39. tadpole.timeSinceLastServerUpdate = 0;
  40. }
  41. this.messageHandler = function(data) {
  42. var tadpole = model.tadpoles[data.id];
  43. if(!tadpole) {
  44. return;
  45. }
  46. tadpole.timeSinceLastServerUpdate = 0;
  47. tadpole.messages.push(new Message(data.message));
  48. }
  49. this.closedHandler = function(data) {
  50. if(model.tadpoles[data.id]) {
  51. delete model.tadpoles[data.id];
  52. delete model.arrows[data.id];
  53. }
  54. }
  55. this.redirectHandler = function(data) {
  56. if (data.url) {
  57. if (authWindow) {
  58. authWindow.document.location = data.url;
  59. } else {
  60. document.location = data.url;
  61. }
  62. }
  63. }
  64. this.processMessage = function(data) {
  65. var fn = webSocketService[data.type + 'Handler'];
  66. if (fn) {
  67. fn(data);
  68. }
  69. }
  70. this.connectionClosed = function() {
  71. webSocketService.hasConnection = false;
  72. $('#cant-connect').fadeIn(300);
  73. };
  74. this.sendUpdate = function(tadpole) {
  75. var sendObj = {
  76. type: 'update',
  77. x: tadpole.x.toFixed(1),
  78. y: tadpole.y.toFixed(1),
  79. angle: tadpole.angle.toFixed(3),
  80. momentum: tadpole.momentum.toFixed(3)
  81. };
  82. if(tadpole.name) {
  83. sendObj['name'] = tadpole.name;
  84. }
  85. webSocket.send(JSON.stringify(sendObj));
  86. }
  87. this.sendMessage = function(msg) {
  88. var regexp = /name: ?(.+)/i;
  89. if(regexp.test(msg)) {
  90. model.userTadpole.name = msg.match(regexp)[1];
  91. $.cookie('todpole_name', model.userTadpole.name, {expires:14});
  92. return;
  93. }
  94. var sendObj = {
  95. type: 'message',
  96. message: msg
  97. };
  98. webSocket.send(JSON.stringify(sendObj));
  99. }
  100. this.authorize = function(token,verifier) {
  101. var sendObj = {
  102. type: 'authorize',
  103. token: token,
  104. verifier: verifier
  105. };
  106. webSocket.send(JSON.stringify(sendObj));
  107. }
  108. }