Не могу вывести пиксели canvas другому пользователю с websocket

Начала изучать websocket. Хочу чтобы одновременно несколько пользователей могли рисовать на холсте и видеть то что рисуют другие. Бэкенд на nodejs + express, Фронтенд на reactjs. По отправлению координат с бека на фронт через консоль видно что в стейт записываются данные, но на холсте не отображаются. Помогите пожалуйста не могу понять где моя ошибка...

Бэкенд server.js

const express = require("express");
const cors = require("cors");
const { nanoid } = require("nanoid");
const app = express();

require("express-ws")(app);

const port = 8000;

app.use(cors());

const activeConnections = {};

app.ws("/draw", function (ws, req) {
  const id = nanoid();
  console.log("client connected! id=", id);
  activeConnections[id] = ws;

  ws.on("close", (msg) => {
    console.log("client disconnected! id=", id);
    delete activeConnections[id];
  });
  let username = "";

  ws.on("message", (msg) => {
    const decodedMessage = JSON.parse(msg);
    switch (decodedMessage.type) {
      case "SET_USERNAME":
        username = decodedMessage.username;
        break;
      case "CREATE_MESSAGE":
        Object.keys(activeConnections).forEach((connId) => {
          const conn = activeConnections[connId];
          conn.send(
            JSON.stringify({
              type: "NEW_MESSAGE",
              coordinate: decodedMessage.coordinate,
            })
          );
        });
        break;
      default:
        console.log("Unknown message type:", decodedMessage.type);
    }
  });
});

app.listen(port, () => {
  console.log("Server started at port " + port);
});

Фронтэнд App.js

import React, { useState, useRef } from "react";
import { useEffect } from "react";

const App = () => {

  const ws = useRef(null);

   
  const [state, setState] = useState({
    mouseDown: false,
    pixelsArray: [],
  });

  console.log(state.pixelsArray);

  useEffect(() => {
    ws.current = new WebSocket("ws://localhost:8000/draw");

    ws.current.onclose = () => console.log("ws closed");

    ws.current.onmessage = (event) => {
      const decodedMessage = JSON.parse(event.data);
      if (decodedMessage.type === 'NEW_MESSAGE') {
        setState(prevState => { return { ...prevState, pixelsArray: [...decodedMessage.coordinate] } })
      }
    }
  }, []);

  const canvas = useRef(null);
  const canvasMouseMoveHandler = (event) => {
    if (state.mouseDown) {
      event.persist();
      const clientX = event.clientX;
      const clientY = event.clientY;
      setState((prevState) => {
        return {
          ...prevState,
          pixelsArray: [
            ...prevState.pixelsArray,
            {
              x: clientX,
              y: clientY,
            },
          ],
        };
      });

      const context = canvas.current.getContext("2d");
      const imageData = context.createImageData(1, 1);
      const d = imageData.data;

      d[0] = 0;
      d[1] = 0;
      d[2] = 0;
      d[3] = 255;

      context.putImageData(imageData, event.clientX, event.clientY);
    }
  };

  const mouseDownHandler = (event) => {
    setState({ ...state, mouseDown: true });
  };

  const mouseUpHandler = (event) => {
    event.preventDefault();
    setState({ ...state, mouseDown: false, pixelsArray: [] });
    ws.current.send(JSON.stringify({
      type: 'CREATE_MESSAGE',
      coordinate: state.pixelsArray
    }));

  };

  return (
    <div>
      <canvas
        ref={canvas}
        style={{ border: "1px solid black" }}
        width={800}
        height={600}
        onMouseDown={mouseDownHandler}
        onMouseUp={mouseUpHandler}
        onMouseMove={canvasMouseMoveHandler}
      />
    </div>
  );
};

export default App;

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