io.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. let callbacks = [];
  2. let onConnectCallbacks = [];
  3. let onDisconnectCallbacks = [];
  4. let onConnectErrorCallbacks = [];
  5. export default {
  6. ready: false,
  7. socket: null,
  8. getSocket: function (cb) {
  9. if (this.ready) cb(this.socket);
  10. else callbacks.push(cb);
  11. },
  12. onConnect: (cb) => {
  13. onConnectCallbacks.push(cb);
  14. },
  15. onDisconnect: (cb) => {
  16. onDisconnectCallbacks.push(cb);
  17. },
  18. onConnectError: (cb) => {
  19. onConnectErrorCallbacks.push(cb);
  20. },
  21. removeAllListeners: function () {
  22. Object.keys(this.socket._callbacks).forEach((id) => {
  23. if (id.indexOf("$event:song") !== -1) {
  24. delete this.socket._callbacks[id];
  25. }
  26. });
  27. },
  28. init: function (url) {
  29. this.socket = window.socket = io(url);
  30. this.socket.on('connect', () => {
  31. // Connect
  32. onConnectCallbacks.forEach((cb) => {
  33. cb();
  34. });
  35. });
  36. this.socket.on('disconnect', () => {
  37. // Disconnect
  38. onDisconnectCallbacks.forEach((cb) => {
  39. cb();
  40. });
  41. });
  42. this.socket.on('connect_error', () => {
  43. // Connect error
  44. onConnectErrorCallbacks.forEach((cb) => {
  45. cb();
  46. });
  47. });
  48. this.ready = true;
  49. callbacks.forEach(callback => {
  50. callback(this.socket);
  51. });
  52. callbacks = [];
  53. }
  54. }