socketReducer.js 4.9 KB

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