io.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. onConnectCallbacks.forEach((cb) => {
  32. cb();
  33. });
  34. });
  35. this.socket.on('disconnect', () => {
  36. onDisconnectCallbacks.forEach((cb) => {
  37. cb();
  38. });
  39. });
  40. this.socket.on('connect_error', () => {
  41. onConnectErrorCallbacks.forEach((cb) => {
  42. cb();
  43. });
  44. });
  45. this.ready = true;
  46. callbacks.forEach(callback => {
  47. callback(this.socket);
  48. });
  49. callbacks = [];
  50. }
  51. }