io.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. let callbacks = [];
  2. let callbacksPersist = [];
  3. let onConnectCallbacks = [];
  4. let onDisconnectCallbacks = [];
  5. let onConnectErrorCallbacks = [];
  6. let onConnectCallbacksPersist = [];
  7. let onDisconnectCallbacksPersist = [];
  8. let onConnectErrorCallbacksPersist = [];
  9. export default {
  10. ready: false,
  11. socket: null,
  12. getSocket: function () {
  13. if (arguments[0] === true) {
  14. if (this.ready) arguments[1](this.socket);
  15. else callbacksPersist.push(arguments[1]);
  16. } else {
  17. if (this.ready) arguments[0](this.socket);
  18. else callbacks.push(arguments[0]);
  19. }
  20. },
  21. onConnect: function() {
  22. if (arguments[0] === true) {
  23. onConnectCallbacksPersist.push(arguments[1]);
  24. } else onConnectCallbacks.push(arguments[0]);
  25. },
  26. onDisconnect: function() {
  27. if (arguments[0] === true) {
  28. onDisconnectCallbacksPersist.push(arguments[1]);
  29. } else onDisconnectCallbacks.push(arguments[0]);
  30. },
  31. onConnectError: function() {
  32. if (arguments[0] === true) {
  33. onConnectErrorCallbacksPersist.push(arguments[1]);
  34. } else onConnectErrorCallbacks.push(arguments[0]);
  35. },
  36. clear: () => {
  37. onConnectCallbacks = [];
  38. onDisconnectCallbacks = [];
  39. onConnectErrorCallbacks = [];
  40. callbacks = [];
  41. },
  42. removeAllListeners: function () {
  43. Object.keys(this.socket._callbacks).forEach((id) => {
  44. if (id.indexOf("$event:") !== -1) {
  45. delete this.socket._callbacks[id];
  46. }
  47. });
  48. },
  49. init: function (url) {
  50. this.socket = window.socket = io(url);
  51. this.socket.on('connect', () => {
  52. console.log("IO: SOCKET CONNECTED");
  53. onConnectCallbacks.forEach((cb) => {
  54. cb();
  55. });
  56. onConnectCallbacksPersist.forEach((cb) => {
  57. cb();
  58. });
  59. });
  60. this.socket.on('disconnect', () => {
  61. console.log("IO: SOCKET DISCONNECTED");
  62. onDisconnectCallbacks.forEach((cb) => {
  63. cb();
  64. });
  65. onDisconnectCallbacksPersist.forEach((cb) => {
  66. cb();
  67. });
  68. });
  69. this.socket.on('connect_error', () => {
  70. console.log("IO: SOCKET CONNECT ERROR");
  71. onConnectErrorCallbacks.forEach((cb) => {
  72. cb();
  73. });
  74. onConnectErrorCallbacksPersist.forEach((cb) => {
  75. cb();
  76. });
  77. });
  78. this.ready = true;
  79. callbacks.forEach(callback => {
  80. callback(this.socket);
  81. });
  82. callbacksPersist.forEach(callback => {
  83. callback(this.socket);
  84. });
  85. callbacks = [];
  86. callbacksPersist = [];
  87. }
  88. }