websocket.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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 = (): SWRResponse<Socket, Error> => {
  28. const socket = io(GLOBAL_ADMIN_SOCKET_NS, {
  29. transports: ['websocket'],
  30. });
  31. socket.on('error', (err) => { logger.error(err) });
  32. socket.on('connect_error', (err) => { logger.error('Failed to connect with websocket.', err) });
  33. return useStaticSWR(GLOBAL_ADMIN_SOCKET_KEY, socket);
  34. };
  35. export const useGlobalAdminSocket = (): SWRResponse<Socket, Error> => {
  36. return useStaticSWR(GLOBAL_ADMIN_SOCKET_KEY);
  37. };