Skip to content

Commit 6329576

Browse files
authored
Merge pull request #99 from nicolelim02/feat/communication
Close socket connection when component unmounts
2 parents 4f414e5 + 0719b06 commit 6329576

File tree

4 files changed

+21
-46
lines changed

4 files changed

+21
-46
lines changed

backend/communication-service/src/handlers/websocketHandler.ts

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ export const handleWebsocketCommunicationEvents = (socket: Socket) => {
1313

1414
const room = io.sockets.adapter.rooms.get(roomId);
1515
if (room?.has(socket.id)) {
16-
// todo: fetch messages from cache and send to the user
1716
socket.emit(CommunicationEvents.ALREADY_JOINED);
1817
return;
1918
}
@@ -33,24 +32,6 @@ export const handleWebsocketCommunicationEvents = (socket: Socket) => {
3332
}
3433
);
3534

36-
socket.on(
37-
CommunicationEvents.LEAVE,
38-
({ roomId, username }: { roomId: string; username: string }) => {
39-
if (!roomId) {
40-
return;
41-
}
42-
43-
socket.leave(roomId);
44-
const createdTime = Date.now();
45-
socket.to(roomId).emit(CommunicationEvents.USER_LEFT, {
46-
from: BOT_NAME,
47-
type: MessageTypes.BOT_GENERATED,
48-
message: `${username} has left the chat`,
49-
createdTime,
50-
});
51-
}
52-
);
53-
5435
socket.on(
5536
CommunicationEvents.SEND_TEXT_MESSAGE,
5637
({
@@ -71,14 +52,13 @@ export const handleWebsocketCommunicationEvents = (socket: Socket) => {
7152
message,
7253
createdTime,
7354
});
74-
75-
// todo: store the message in a cache
7655
}
7756
);
7857

7958
socket.on(CommunicationEvents.DISCONNECT, () => {
8059
const { roomId } = socket.data;
8160
if (roomId) {
61+
console.log("disconnected", roomId, socket.data.username);
8262
const createdTime = Date.now();
8363
socket.to(roomId).emit(CommunicationEvents.DISCONNECTED, {
8464
from: BOT_NAME,

backend/communication-service/src/utils/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
export enum CommunicationEvents {
22
// receive
33
JOIN = "join",
4-
LEAVE = "leave",
54
SEND_TEXT_MESSAGE = "send_text_message",
65
DISCONNECT = "disconnect",
76

87
// send
9-
USER_LEFT = "user_left",
108
USER_JOINED = "user_joined",
119
ALREADY_JOINED = "already_joined",
1210
TEXT_MESSAGE_RECEIVED = "text_message_received",

frontend/src/components/Chat/index.tsx

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,10 @@ type Message = {
1818
export enum CommunicationEvents {
1919
// receive
2020
JOIN = "join",
21-
LEAVE = "leave",
2221
SEND_TEXT_MESSAGE = "send_text_message",
2322
DISCONNECT = "disconnect",
2423

2524
// send
26-
USER_LEFT = "user_left",
2725
USER_JOINED = "user_joined",
2826
ALREADY_JOINED = "already_joined",
2927
TEXT_MESSAGE_RECEIVED = "text_message_received",
@@ -69,32 +67,31 @@ const Chat: React.FC<ChatProps> = ({ isActive }) => {
6967
username: user?.username,
7068
});
7169
// eslint-disable-next-line react-hooks/exhaustive-deps
70+
71+
return () => {
72+
console.log("closing socket...");
73+
communicationSocket.close();
74+
setMessages([]); // clear the earlier messages in dev mode
75+
};
7276
}, []);
7377

7478
useEffect(() => {
7579
// initialize listener for incoming messages
76-
communicationSocket.on(
77-
CommunicationEvents.USER_JOINED,
78-
(message: Message) => {
79-
setMessages((prevMessages) => [...prevMessages, message]);
80-
}
81-
);
82-
communicationSocket.on(
83-
CommunicationEvents.TEXT_MESSAGE_RECEIVED,
84-
(message: Message) => {
85-
setMessages((prevMessages) => [...prevMessages, message]);
86-
}
87-
);
88-
communicationSocket.on(
89-
CommunicationEvents.DISCONNECTED,
90-
(message: Message) => {
91-
setMessages((prevMessages) => [...prevMessages, message]);
92-
}
93-
);
80+
const listener = (message: Message) => {
81+
setMessages((prevMessages) => [...prevMessages, message]);
82+
};
83+
84+
communicationSocket.on(CommunicationEvents.USER_JOINED, listener);
85+
communicationSocket.on(CommunicationEvents.TEXT_MESSAGE_RECEIVED, listener);
86+
communicationSocket.on(CommunicationEvents.DISCONNECTED, listener);
9487

9588
return () => {
96-
communicationSocket.off(CommunicationEvents.USER_JOINED);
97-
communicationSocket.off(CommunicationEvents.TEXT_MESSAGE_RECEIVED);
89+
communicationSocket.off(CommunicationEvents.USER_JOINED, listener);
90+
communicationSocket.off(
91+
CommunicationEvents.TEXT_MESSAGE_RECEIVED,
92+
listener
93+
);
94+
communicationSocket.off(CommunicationEvents.DISCONNECTED, listener);
9895
};
9996
}, []);
10097

frontend/src/components/QuestionCodeTemplates/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ const QuestionCodeTemplates: React.FC<QuestionCodeTemplatesProps> = ({
4646
}));
4747
};
4848

49-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
49+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
5050
const handleTabKeys = (event: any) => {
5151
const { value } = event.target;
5252

0 commit comments

Comments
 (0)