websocket.tsx 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { SWRResponse } from 'swr';
  2. import io, { Socket } from 'socket.io-client';
  3. import { useStaticSWR } from './use-static-swr';
  4. import loggerFactory from '~/utils/logger';
  5. const logger = loggerFactory('growi:stores:ui');
  6. export const GLOBAL_SOCKET_NS = '/';
  7. export const GLOBAL_SOCKET_KEY = 'globalSocket';
  8. export const GLOBAL_ADMIN_SOCKET_NS = '/admin';
  9. export const GLOBAL_ADMIN_SOCKET_KEY = 'globalAdminSocket';
  10. /*
  11. * Global Socket
  12. */
  13. export const useSetupGlobalSocket = (): SWRResponse<Socket, Error> => {
  14. const socket = io(GLOBAL_SOCKET_NS, {
  15. transports: ['websocket'],
  16. });
  17. socket.on('error', (err) => { logger.error(err) });
  18. socket.on('connect_error', (err) => { logger.error('Failed to connect with websocket.', err) });
  19. return useStaticSWR(GLOBAL_SOCKET_KEY, socket);
  20. };
  21. export const useGlobalSocket = (): SWRResponse<Socket, Error> => {
  22. return useStaticSWR(GLOBAL_SOCKET_KEY);
  23. };
  24. /*
  25. * Global Admin Socket
  26. */
  27. export const useSetupGlobalAdminSocket = (shouldInit: boolean): SWRResponse<Socket, Error> => {
  28. let socket: Socket | undefined;
  29. if (shouldInit) {
  30. socket = io(GLOBAL_ADMIN_SOCKET_NS, {
  31. transports: ['websocket'],
  32. });
  33. socket.on('error', (err) => { logger.error(err) });
  34. socket.on('connect_error', (err) => { logger.error('Failed to connect with websocket.', err) });
  35. }
  36. return useStaticSWR(shouldInit ? GLOBAL_ADMIN_SOCKET_KEY : null, socket);
  37. };
  38. export const useGlobalAdminSocket = (): SWRResponse<Socket, Error> => {
  39. return useStaticSWR(GLOBAL_ADMIN_SOCKET_KEY);
  40. };