Skip to content

Commit dfca8f9

Browse files
committed
cursor tracking for 2 users in a room
1 parent 55dd1ec commit dfca8f9

File tree

2 files changed

+25
-23
lines changed

2 files changed

+25
-23
lines changed

app/src/components/left/RoomsContainer.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ const RoomsContainer = () => {
9696
socket.on('updateUserList', (newUserList) => {
9797
console.log('user list received from server');
9898
dispatch(setUserList(newUserList));
99+
console.log('userList:', userList);
99100
});
100101

101102
socket.on('child data from server', (childData: object) => {

app/src/components/main/Canvas.tsx

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,12 @@ function Canvas(props: {}): JSX.Element {
2121
const contextParam = useSelector((store: RootState) => store.contextSlice);
2222
const roomCode = useSelector((store: RootState) => store.roomSlice.roomCode);
2323
const userName = useSelector((store: RootState) => store.roomSlice.userName);
24+
const userList = useSelector((store: RootState) => store.roomSlice.userList);
25+
2426
//-------mouse tracking-------
27+
console.log('canvas is rendered');
2528

29+
//remote cursor data
2630
const [remoteCursor, setRemoteCursor] = useState({
2731
x: 0,
2832
y: 0,
@@ -32,39 +36,36 @@ function Canvas(props: {}): JSX.Element {
3236

3337
const debounceSetPosition = debounce((newX, newY) => {
3438
//emit socket event every 500ms when cursor moves
35-
// {{userName: x, y} {userName: x, y}}
36-
emitEvent('cursorData', roomCode, { x: newX, y: newY, userName });
37-
}, 500);
39+
if (userList.length > 1)
40+
emitEvent('cursorData', roomCode, { x: newX, y: newY, userName });
41+
}, 100);
3842

3943
const handleMouseMove = (e) => {
4044
debounceSetPosition(e.clientX, e.clientY);
4145
};
4246

43-
//listen to socket event
4447
const socket = getSocket();
4548
if (socket) {
49+
// console.log('setting up socket listener');
4650
socket.on('remote cursor data from server', (remoteData) => {
47-
//update user name
48-
if (remoteCursor.remoteUserName === '')
49-
setRemoteCursor((prevState) => ({
50-
...prevState,
51-
remoteUserName: remoteData.userName
52-
}));
53-
//update isVisible
54-
if (remoteCursor.isVisible === false)
55-
setRemoteCursor((prevState) => ({
56-
...prevState,
57-
isVisible: true
58-
}));
59-
//update coords
60-
setRemoteCursor((prevState) => ({
61-
...prevState,
62-
x: remoteData.x,
63-
y: remoteData.y
64-
}));
51+
setRemoteCursor((prevState) => {
52+
// check if the received data is different from the current state
53+
if (prevState.x !== remoteData.x || prevState.y !== remoteData.y) {
54+
return {
55+
...prevState,
56+
x: remoteData.x,
57+
y: remoteData.y,
58+
remoteUserName: remoteData.userName,
59+
isVisible: true
60+
};
61+
}
62+
// if data is the same, return the previous state to prevent re-render
63+
return prevState;
64+
});
6565
});
6666
}
67-
//----------------
67+
68+
//--------------------------------
6869

6970
// find the current component based on the canvasFocus component ID in the state
7071
const currentComponent: Component = state.components.find(

0 commit comments

Comments
 (0)