2
0

io.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const callbacks = {
  2. general: {
  3. general: [],
  4. persist: [],
  5. },
  6. connect: {
  7. general: [],
  8. persist: [],
  9. error: {
  10. general: [],
  11. persist: [],
  12. },
  13. },
  14. disconnect: {
  15. general: [],
  16. persist: [],
  17. },
  18. };
  19. export default {
  20. ready: false,
  21. socket: null,
  22. getSocket(...args) {
  23. if (args[0] === true) {
  24. if (this.ready) args[1](this.socket);
  25. else callbacks.general.persist.push(args[1]);
  26. } else if (this.ready) {
  27. args[0](this.socket);
  28. } else {
  29. callbacks.general.general.push(args[0]);
  30. }
  31. },
  32. onConnect(...args) {
  33. if (args[0] === true) callbacks.connect.persist.push(args[1]);
  34. else callbacks.connect.general.push(args[0]);
  35. },
  36. onDisconnect(...args) {
  37. if (args[0] === true) callbacks.disconnect.persist.push(args[1]);
  38. else callbacks.disconnect.general.push(args[0]);
  39. },
  40. onConnectError(...args) {
  41. if (args[0] === true) callbacks.connect.error.persist.push(args[1]);
  42. else callbacks.connect.error.general.push(args[0]);
  43. },
  44. clear() {
  45. callbacks.general.general = [];
  46. callbacks.connect.general = [];
  47. callbacks.disconnect.general = [];
  48. callbacks.connect.error.general = [];
  49. },
  50. removeAllListeners() {
  51. Object.keys(this.socket._callbacks).forEach(id => {
  52. if (id.indexOf("$event:") !== -1 && id.indexOf("$event:keep.") === -1) delete this.socket._callbacks[id];
  53. });
  54. },
  55. init(url) {
  56. this.socket = window.socket = io(url);
  57. this.socket.on("connect", () => {
  58. callbacks.connect.general.forEach(callback => callback());
  59. callbacks.connect.persist.forEach(callback => callback());
  60. });
  61. this.socket.on("disconnect", () => {
  62. callbacks.disconnect.general.forEach(callback => callback());
  63. callbacks.disconnect.persist.forEach(callback => callback());
  64. });
  65. this.socket.on("connect_error", () => {
  66. callbacks.connect.error.general.forEach(callback => callback());
  67. callbacks.connect.error.persist.forEach(callback => callback());
  68. });
  69. this.ready = true;
  70. callbacks.general.general.forEach(callback => callback(this.socket));
  71. callbacks.general.persist.forEach(callback => callback(this.socket));
  72. callbacks.general = { general: [], persist: [] };
  73. },
  74. };