socketReducer.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import {createSlice } from '@reduxjs/toolkit';
  2. import {io} from 'socket.io-client';
  3. import { store } from '../store';
  4. import { removeToken } from './userDataReducer';
  5. import { privateMessage } from './userDataReducer';
  6. const initialState = {
  7. socketStatus: 'idle',
  8. socket: null,
  9. socketUserData: {},
  10. usersOnline: [],
  11. startMessages: [],
  12. allUsers: [],
  13. writing: false,
  14. usersWriting: [],
  15. newMessages : [],
  16. newPrivateMessages: {},
  17. newPrivateMessagesArray: []
  18. }
  19. const SOCKET_URL = process.env.REACT_APP_SERVER_URL;
  20. const connectToSocket = (event) => {
  21. try {
  22. const token = localStorage.getItem('token');
  23. if(token){
  24. const socket = io.connect( //need to add other function for connecting
  25. SOCKET_URL,
  26. {auth: {token}})
  27. socket.on('connected', data => {
  28. store.dispatch(getUser(data));
  29. // socketEventsDispatch(socket)
  30. })
  31. .on(event, (data) => {
  32. switch (event){
  33. case 'allmessages':
  34. store.dispatch(getAllMessages(data));
  35. break;
  36. case 'allDbUsers':
  37. store.dispatch(getAllUsers(data));
  38. break;
  39. default:
  40. break;
  41. }
  42. })
  43. .on('newmessage', (data) => {
  44. store.dispatch(addNewMessage(data))
  45. })
  46. .on('private', (data) => {
  47. store.dispatch(addNewPrivateMessage(data))
  48. })
  49. .on('ban', (data) => {
  50. store.dispatch(removeToken());
  51. localStorage.removeItem('token');
  52. })
  53. .on('usersOnline', (data) => {
  54. store.dispatch(getUsersOnline(data))
  55. })
  56. .on('friends', data => {
  57. console.log('friends from server', data)
  58. })
  59. .on('disconnect', (data) => {
  60. if( data === 'io server disconnect') {
  61. socket.disconnect();
  62. store.dispatch(removeToken());
  63. }
  64. })
  65. .on('error', e => {console.log('On connected', e)});
  66. return socket;
  67. }
  68. } catch (error) {
  69. console.log('error connecting to socket ', error)
  70. }
  71. };
  72. // const socketEventsDispatch = (socket) => {
  73. // socket
  74. // .on('writing', (data) => {
  75. // console.log(data)
  76. // store.dispatch(writing(data));
  77. // })
  78. // }
  79. export const getUserSocketSlice = createSlice({
  80. name: 'userSocket',
  81. initialState,
  82. reducers: {
  83. removeSocket: state => {
  84. state.socket = null
  85. state.socketStatus = 'disconnected'},
  86. getSocket: (state, action) => {
  87. state.socket = connectToSocket(action.payload);
  88. state.socketStatus = 'connected';
  89. },
  90. getUser: (state, action) => {state.socketUserData = action.payload},
  91. getAllMessages: (state, action) => {state.startMessages = action.payload},
  92. getUsersOnline: (state, action) => {state.usersOnline = action.payload},
  93. getAllUsers: (state, action) => {state.allUsers = action.payload},
  94. addNewMessage: (state, action) => {state.newMessages.push(action.payload)},
  95. addNewPrivateMessage: (state, action) => {
  96. state.newPrivateMessages = action.payload
  97. state.newPrivateMessagesArray.push(action.payload)
  98. },
  99. }
  100. }
  101. );
  102. const {actions, reducer} = getUserSocketSlice;
  103. const getUserSocketReducer = reducer;
  104. export default getUserSocketReducer;
  105. export const {
  106. removeSocket,
  107. getSocket,
  108. getUser,
  109. getAllMessages,
  110. getUsersOnline,
  111. addNewMessage,
  112. addNewPrivateMessage,
  113. getAllUsers,
  114. writing
  115. } = actions;