Skip to content

Commit 17d20b5

Browse files
committed
clean up chatroom function
1 parent f8167bd commit 17d20b5

File tree

4 files changed

+44
-10
lines changed

4 files changed

+44
-10
lines changed

app/src/components/bottom/chatRoom.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ const Chatroom = (props): JSX.Element => {
1010
(store: RootState) => store.roomSlice.newMessage
1111
);
1212

13+
const userChange = useSelector(
14+
(store: RootState) => store.roomSlice.userChange
15+
);
16+
1317
const nickName = collaborationRoom.userName;
1418
const roomCode = collaborationRoom.roomCode;
1519

@@ -84,6 +88,17 @@ const Chatroom = (props): JSX.Element => {
8488
}
8589
}, [newMessage]);
8690

91+
useEffect(() => {
92+
const messageContainer = document.getElementById('message-container');
93+
const messageElement = document.createElement('div');
94+
messageElement.innerText =
95+
userChange.status === 'JOIN'
96+
? `${userChange.nickName} joined the chatroom`
97+
: `${userChange.nickName} left the chatroom`;
98+
messageElement.style.color = 'yellow';
99+
messageContainer.append(messageElement);
100+
}, [userChange]);
101+
87102
return (
88103
<div
89104
className="livechat-panel"

app/src/components/left/RoomsContainer.tsx

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ import {
4141
setUserName,
4242
setUserJoined,
4343
setUserList,
44-
setNewMessage
44+
setNewMessage,
45+
setUserChange
4546
} from '../../redux/reducers/slice/roomSlice';
4647
import { codePreviewCooperative } from '../../redux/reducers/slice/codePreviewSlice';
4748
import { cooperativeStyle } from '../../redux/reducers/slice/styleSlice';
@@ -74,6 +75,10 @@ const RoomsContainer = () => {
7475
(store: RootState) => store.roomSlice.newMessage
7576
);
7677

78+
const userChange = useSelector(
79+
(store: RootState) => store.roomSlice.userChange
80+
);
81+
7782
// for websockets - initialize socket connection passing in roomCode
7883
function initSocketConnection(roomCode: string) {
7984
// helper function to create socket connection
@@ -105,9 +110,14 @@ const RoomsContainer = () => {
105110
});
106111

107112
// update user list when there's a change: new join or leave the room
108-
socket.on('updateUserList', (newUserList) => {
113+
socket.on('updateUserList', (messageData) => {
109114
//console.log('user list received from server');
110-
dispatch(setUserList(newUserList));
115+
dispatch(setUserList(messageData.userList));
116+
if (
117+
JSON.stringify(messageData.activity) !== JSON.stringify(userChange)
118+
) {
119+
dispatch(setUserChange(messageData.activity));
120+
}
111121
});
112122

113123
socket.on('new chat message', (messageData) => {

app/src/redux/reducers/slice/roomSlice.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ const initialState = {
66
userName: '',
77
newMessage: { nickName: '', message: '' },
88
userList: [],
9-
userJoined: false
9+
userJoined: false,
10+
userChange: { nickName: '', status: '' }
1011
};
1112

1213
// Creates new slice with the name , initial state, and reducer function
@@ -28,6 +29,9 @@ const roomSlice = createSlice({
2829
},
2930
setNewMessage: (state, action) => {
3031
state.newMessage = action.payload;
32+
},
33+
setUserChange: (state, action) => {
34+
state.userChange = action.payload;
3135
}
3236
}
3337
});
@@ -38,7 +42,8 @@ export const {
3842
setUserName,
3943
setUserList,
4044
setUserJoined,
41-
setNewMessage
45+
setNewMessage,
46+
setUserChange
4247
} = roomSlice.actions;
4348
// Exports so we can combine in rootReducer
4449
export default roomSlice.reducer;

server/server.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,10 @@ io.on('connection', (client) => {
132132
//send the message to all clients in room but the sender
133133
io.to(roomCode).emit(
134134
'updateUserList',
135-
Object.values(roomLists[roomCode]) // send updated userList to all users in room
135+
{
136+
userList: Object.values(roomLists[roomCode]),
137+
activity: { nickName: userName, status: 'JOIN' }
138+
} // send updated userList to all users in room
136139
);
137140
}
138141
} catch (error) {
@@ -153,16 +156,17 @@ io.on('connection', (client) => {
153156
//disconnecting functionality
154157
client.on('disconnecting', () => {
155158
const roomCode = Array.from(client.rooms)[1]; //grabbing current room client was in when disconnecting
159+
const nickName = roomLists[roomCode][client.id];
156160
delete roomLists[roomCode][client.id];
157161
//if room empty, delete room from room list
158162
if (!Object.keys(roomLists[roomCode]).length) {
159163
delete roomLists[roomCode];
160164
} else {
161165
//else emit updated user list
162-
io.to(roomCode).emit(
163-
'updateUserList',
164-
Object.values(roomLists[roomCode])
165-
);
166+
io.to(roomCode).emit('updateUserList', {
167+
userList: Object.values(roomLists[roomCode]),
168+
activity: { nickName, status: 'LEAVE' }
169+
});
166170
}
167171
});
168172

0 commit comments

Comments
 (0)