Прослушивание событий вебсокетов

Подскажите, пжлста, имеются вебсокеты и не могу понять где накосячил, на клиенте один экзмепляр сокета, слушателей на каждое событие по одному, но при получении с сервера событие updateMessage происходит два раза у одного клиента(хотелось бы один), а getNewMessage у всех один- 1

//серверная часть
  socket.on('message:createNewMessage', async (data) => {
    const parsedData = JSON.parse(data)

    const message = await MessageService.addMessage(parsedData)

    socket.broadcast.emit('message:getNewMessage', JSON.stringify(message))
    io.to(socket.id).emit('message:updateMessage', JSON.stringify(message))
  })

//клиентская часть
 export const socketMiddleware = (
  wsActions: TSocketChatMiddlewareActions
): Middleware<{}, RootState> => {
  return (store) => {
    let socket: Socket | null = null

    return (next) => (action) => {
      const { dispatch } = store
      const user = store.getState().rootReducer.user.data.name
      const {
        wsConnect,
        wsDisconnect,
        wsSendMessage,
        wsConnecting,
        wsOnOpen,
        wsOnClose,
        wsOnError,
        wsOnMessage,
        wsSetUsers,
        wsUserJoined,
        wsUserLeft,
        wsRecieveAllMessage,
      } = wsActions

      if (wsConnect.match(action)) {
        socket = io('http://localhost:5000', {
          path: '/api/messages',
          transports: ['websocket'],
          reconnectionDelay: 5000,
          query: {
            user,
          },
        })

        dispatch(wsConnecting())
      }

      if (socket) {
        socket.removeAllListeners()
        socket.on('connect', () => {
          dispatch(wsOnOpen())
        })

        socket.on('connect_error', (error) => {
          dispatch(wsOnError(`Error === ${error.message}`))
        })

        socket.on('disconnect', (reason: any) => {
          dispatch(wsOnClose())
        })

        //USER
        socket.on('login', (data: TConnectDataToOwner) => {
          dispatch(socketChatAction.setUsers(data))
          socket!.emit('message:getHistoryMessage')
        })

        socket.on('user left', (data) => {
          dispatch(socketChatAction.addLeftUserEvent(data))
        })

        socket.on('user joined', (data) => {
          dispatch(socketChatAction.addJoinUserEvent(data))
        })

        socket.on('message:recieveHistoryMessage', (data) => {
          const messages = JSON.parse(data)
          dispatch(socketChatAction.setHistoryMessages(messages))
        })

        if (wsSendMessage.match(action)) {
          const messageData = action.payload

          switch (messageData.processing) {
            case TMessageProcessing.ADD:
              const modifiedData = {
                ...messageData.data,
                _id: uniqid(),
                timestamp: new Date().toISOString(),
              }

              dispatch(socketChatAction.addMessage(modifiedData))
              socket.emit(
                'message:createNewMessage',
                JSON.stringify(modifiedData)
              )
              break

            case TMessageProcessing.EDIT:
              socket.emit(
                'message:editMessage',
                JSON.stringify({
                  ...messageData.data,
                  timestamp: new Date().toISOString(),
                })
              )
              break

            case TMessageProcessing.EDIT:
              socket.emit(
                'message:editMessage',
                JSON.stringify({
                  ...messageData.data,
                  timestamp: new Date().toISOString(),
                })
              )
              break
          }
        }

        socket.on('message:updateMessage', (data) => {
          const message = JSON.parse(data)
          dispatch(socketChatAction.updateMessage(message))
        })

        socket.on('message:getNewMessage', (data) => {
          const message = JSON.parse(data)
          dispatch(socketChatAction.addMessage(message))
        })

        if (wsDisconnect.match(action)) {
          socket.disconnect()
          socket = null
          dispatch(wsOnClose())
        }
      }

      next(action)
    }
  }
}

  useEffect(() => {
    dispatch(connect())
    return () => {
      dispatch(disconnect())
    }
  }, [])
 "react": "^18.2.0",


Ответы (0 шт):