SocketIoContainer.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { Container } from 'unstated';
  2. import io from 'socket.io-client';
  3. import loggerFactory from '@alias/logger';
  4. const logger = loggerFactory('growi:cli:SocketIoContainer');
  5. /**
  6. * Service container related to options for WebSocket
  7. * @extends {Container} unstated Container
  8. */
  9. export default class SocketIoContainer extends Container {
  10. constructor(appContainer, namespace) {
  11. super();
  12. this.appContainer = appContainer;
  13. this.appContainer.registerContainer(this);
  14. const ns = namespace || '/';
  15. this.socket = io(ns, {
  16. transports: ['websocket'],
  17. });
  18. this.socketClientId = Math.floor(Math.random() * 100000);
  19. this.socket.on('connect_error', (error) => {
  20. logger.error(error);
  21. });
  22. this.socket.on('error', (error) => {
  23. logger.error(error);
  24. });
  25. this.state = {
  26. };
  27. }
  28. /**
  29. * Workaround for the mangling in production build to break constructor.name
  30. */
  31. static getClassName() {
  32. return 'SocketIoContainer';
  33. }
  34. getSocket() {
  35. return this.socket;
  36. }
  37. getSocketClientId() {
  38. return this.socketClientId;
  39. }
  40. }