Skip to content

Commit b84c1d8

Browse files
committed
Synchronise Language Change
1 parent 0f3e386 commit b84c1d8

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

Backend/CollabService/websocket/roomManagerSocket.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ function setupWebSocket(server) {
3131
console.log('got message ', data.message);
3232
broadcastMessage(data.roomId, data.message);
3333
break;
34+
case 'languageChange':
35+
// send message to all users in room
36+
console.log('got language change ', data.language);
37+
broadcastLanguageChange(data.roomId, data.language, data.user);
38+
break;
3439
default:
3540
console.error('Unknown message type');
3641
}
@@ -52,6 +57,17 @@ function setupWebSocket(server) {
5257
}
5358
}
5459

60+
function broadcastLanguageChange(roomId, language, userId) {
61+
const room = getRoom(roomId)
62+
if (room) {
63+
room.sockets.forEach((client) => {
64+
if (client.readyState === WebSocket.OPEN) {
65+
client.send(JSON.stringify({ type: 'languageChange', language: language , user: userId}));
66+
}
67+
})
68+
}
69+
}
70+
5571
}
5672

5773
module.exports = { setupWebSocket };

Frontend/src/components/collab/CollabNavigationBar.jsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
import React from 'react';
22
import { Button, Container, Navbar, Nav, Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'react-bootstrap';
33

4-
const CollabNavigationBar = ({ handleExit, users, handleCodeRun, setLanguage, language }) => {
4+
const CollabNavigationBar = ({ handleExit, users, handleCodeRun, setLanguage, language, userLangChange }) => {
55

66
return (
77
<Navbar className='bg-light' sticky='top' style={{ zIndex: 1040 }}>
88
<Container className='d-flex justify-content-between'>
99

1010
{/* Language Dropdown on left */}
1111
<Nav className='me-auto'>
12-
<Dropdown onSelect={(eventKey) => setLanguage(eventKey)}>
12+
<Dropdown onSelect={(eventKey) => {
13+
setLanguage(eventKey);
14+
userLangChange(eventKey);
15+
}}>
1316
<DropdownToggle style={{ backgroundColor: 'transparent', border: '1px solid #ccc', borderRadius: '0', color: '#000', padding: '8px 16px'}}>
1417
{language}
1518
</DropdownToggle>

Frontend/src/components/collab/CollaborationSpace.jsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ const CollaborationSpace = () => {
116116
case 'newMessage':
117117
console.log("adding message", data.message)
118118
break;
119+
case 'languageChange':
120+
addNotif(`User ${data.user} has changed the language to ${data.language}`);
121+
setLanguage(data.language);
122+
break;
119123
case 'userJoin':
120124
addNotif(`User ${data.user} has joined.`)
121125
break;
@@ -199,6 +203,11 @@ const CollaborationSpace = () => {
199203
websocketRef.current.send(JSON.stringify({ type: 'sendMessage', roomId: roomId, message: message}));
200204
}
201205

206+
const handleLanguageChange = (value) => {
207+
websocketRef.current.send(JSON.stringify({ type: 'languageChange', roomId: roomId,
208+
user: userId, language: value }));
209+
}
210+
202211
if (loading) {
203212
return (
204213
<div style={{ textAlign: 'center' }}>
@@ -240,7 +249,8 @@ const CollaborationSpace = () => {
240249
</ToastContainer>
241250

242251
{/* Main component content */}
243-
<CollabNavigationBar handleExit={handleExit} handleCodeRun={handleCodeRun} users={users} setLanguage={setLanguage} language={language}/>
252+
<CollabNavigationBar handleExit={handleExit} handleCodeRun={handleCodeRun} users={users}
253+
setLanguage={setLanguage} language={language} userLangChange={handleLanguageChange}/>
244254
<Container fluid style={{ marginTop: '20px' }}>
245255
<Row>
246256
<Col md={8}>

0 commit comments

Comments
 (0)