userSocket.ts 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { useAppStore } from '../store/modules/app';
  2. import { getApp } from './userApp';
  3. import { useRoom } from './useRoom';
  4. import { useRtcStore } from '/@/store/modules/rtc';
  5. const io = (window as any).io as SocketIOClientStatic;
  6. let socket: SocketIOClient.Socket;
  7. interface ReturnUseSocketType {
  8. createSocket: Fn;
  9. closeSocket: Fn;
  10. socket: SocketIOClient.Socket;
  11. }
  12. export function createSocket() {
  13. const rtcStore = useRtcStore();
  14. // console.log('rtcStore', rtcStore)
  15. const address = import.meta.env.VITE_APP_SOCKET_URL;
  16. console.log('address', address);
  17. socket = io(address, {
  18. path: '/ws-sync',
  19. transports: ['websocket'],
  20. });
  21. rtcStore.setSocket(socket);
  22. return socket;
  23. }
  24. async function closeSocket() {
  25. const { leaveRoom, createNewURLEntry } = useRoom();
  26. const rtcStore = useRtcStore();
  27. const appStore = useAppStore();
  28. await getApp().Connect.follow.exit();
  29. await leaveRoom();
  30. appStore.setIsTourMode(true);
  31. if (rtcStore.isLeader) {
  32. socket && socket.emit('action', { type: 'leader-dismiss' });
  33. }
  34. console.log('socket', socket);
  35. socket && socket.emit('disconnected');
  36. // console.log('socket', socket.connected);
  37. rtcStore.clearMemberList();
  38. createNewURLEntry({
  39. vruserId: '',
  40. isTour: 1,
  41. name: '',
  42. role: '',
  43. roomId: rtcStore.roomId,
  44. avatar: '',
  45. });
  46. setTimeout(() => {
  47. location.reload();
  48. }, 100);
  49. }
  50. export function useSocket(): ReturnUseSocketType {
  51. return {
  52. socket,
  53. closeSocket,
  54. createSocket,
  55. };
  56. }