Skip to content

Commit da56395

Browse files
committed
with password procection room procection and Jons bugs fixed
1 parent 15f39ff commit da56395

File tree

2 files changed

+203
-82
lines changed

2 files changed

+203
-82
lines changed

app/src/components/left/RoomsContainer.tsx

Lines changed: 126 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,15 @@ import {
5353
DeleteContextPayload,
5454
addComponentToContext
5555
} from '../../../src/redux/reducers/slice/contextReducer';
56+
import { useState } from 'react';
5657

5758
const RoomsContainer = () => {
59+
const [isJoinCallabRoom, setIsJoinCollabRoom] = useState(false);
60+
const [joinedPasswordAttempt, setJoinedPasswordAttempt] = useState('');
61+
const [isPasswordAttemptIncorrect, setIsPasswordAttemptIncorrect] =
62+
useState(true);
63+
const [isCollabRoomTaken, setIsCollabRoomTaken] = useState(false);
64+
5865
const dispatch = useDispatch();
5966
const roomCode = useSelector((store: RootState) => store.roomSlice.roomCode);
6067
const userName = useSelector((store: RootState) => store.roomSlice.userName);
@@ -68,7 +75,11 @@ const RoomsContainer = () => {
6875
);
6976
const messages = useSelector((store: RootState) => store.roomSlice.messages);
7077

71-
const initSocketConnection = (roomCode: string) => {
78+
const initSocketConnection = (
79+
roomCode: string,
80+
roomPassword: string,
81+
method: string
82+
) => {
7283
// helper function to create socket connection
7384
initializeSocket();
7485
// assign socket to result of helper function to return socket created
@@ -77,10 +88,45 @@ const RoomsContainer = () => {
7788
if (socket) {
7889
//run everytime when a client connects to server
7990
socket.on('connect', () => {
80-
socket.emit('joining', userName, roomCode);
81-
// console.log(`${userName} Joined room ${roomCode} from RoomsContainer`);
91+
if (method === 'CREATE') {
92+
socket.emit(
93+
'creating a room',
94+
userName,
95+
roomCode,
96+
roomPassword,
97+
method
98+
);
99+
// socket.emit('creating', userName, roomCode, roomPassword);
100+
} else if (method === 'JOIN') {
101+
socket.emit(
102+
'creating a room',
103+
userName,
104+
roomCode,
105+
roomPassword,
106+
method
107+
);
108+
}
82109
});
83110

111+
socket.on('wrong password', () => {
112+
setIsPasswordAttemptIncorrect(false);
113+
console.log('WRONG PASSWORD in client');
114+
});
115+
116+
socket.on('correct password', () => {
117+
setIsPasswordAttemptIncorrect(true);
118+
addNewUserToCollabRoom();
119+
console.log('correct in client');
120+
});
121+
122+
socket.on('user created a new room', () => {
123+
addNewUserToCollabRoom();
124+
});
125+
126+
socket.on('room is already taken', () => {
127+
setIsCollabRoomTaken(true);
128+
console.log('room is already taken');
129+
});
84130
//If you are the host: send current state to server when a new user joins
85131
socket.on('requesting state from host', (callback) => {
86132
const newState = store.getState(); //pull the current state
@@ -275,23 +321,35 @@ const RoomsContainer = () => {
275321
}
276322
};
277323

278-
const handleUserEnteredRoom = (roomCode) => {
279-
initSocketConnection(roomCode);
324+
const createNewCollabRoom = () => {
325+
if (userList.length !== 0) {
326+
dispatch(setUserList([]));
327+
}
328+
329+
initSocketConnection(roomCode, roomPassword, 'CREATE');
280330
};
281331

282-
const joinRoom = () => {
283-
if (userList.length !== 0) dispatch(setUserList([]));
284-
handleUserEnteredRoom(roomCode);
332+
const addNewUserToCollabRoom = () => {
285333
dispatch(setRoomCode(roomCode));
286334
dispatch(setPassword(roomPassword));
287335
dispatch(setUserJoined(true));
288336
};
289337

338+
const joinExistingCollabRoom = async () => {
339+
if (userList.length !== 0) {
340+
dispatch(setUserList([]));
341+
}
342+
343+
initSocketConnection(roomCode, joinedPasswordAttempt, 'JOIN');
344+
};
345+
290346
const leaveRoom = () => {
291347
let socket = getSocket();
348+
292349
if (socket) {
293350
socket.disconnect();
294351
}
352+
295353
dispatch(setRoomCode(''));
296354
dispatch(setUserName(''));
297355
dispatch(setUserList([]));
@@ -303,16 +361,18 @@ const RoomsContainer = () => {
303361
const checkInputField = (...inputs) => {
304362
let userName: string = inputs[0].trim();
305363
let roomCode: string = inputs[1].trim();
306-
return userName.length === 0 || roomCode.length === 0;
364+
let password: string = inputs[2].trim();
365+
return (
366+
userName.length === 0 || roomCode.length === 0 || password.length === 0
367+
);
307368
};
308369

309370
const handleKeyDown = (e) => {
310371
if (e.key === 'Enter' && e.target.id === 'filled-hidden-label-small') {
311372
e.preventDefault();
312-
joinRoom();
373+
createNewCollabRoom();
313374
}
314375
};
315-
316376
const userColors = [
317377
'#FC00BD',
318378
'#D0FC00',
@@ -333,7 +393,6 @@ const RoomsContainer = () => {
333393
margin: '0 auto 0 auto'
334394
}}
335395
>
336-
{' '}
337396
<Typography variant="h5" color={'#f2fbf8'}>
338397
Live Room: {roomCode}
339398
</Typography>
@@ -387,7 +446,7 @@ const RoomsContainer = () => {
387446
>
388447
<ListItemText
389448
primary={`${index + 1}. ${
390-
index === 0 ? `${user} (host)` : user
449+
index === 0 ? `${user.userName} (host)` : user.userName
391450
}`}
392451
style={{ color: userColors[userList.indexOf(user)] }}
393452
/>
@@ -402,13 +461,12 @@ const RoomsContainer = () => {
402461
backgroundColor: '#f2fbf8',
403462
color: '#092a26',
404463
'&:hover': {
405-
backgroundColor: '#354e9c',
464+
backgroundColor: '#a5ead6',
406465
borderColor: '#0062cc'
407466
}
408467
}}
409468
>
410-
{' '}
411-
Leave Room{' '}
469+
Leave Room
412470
</Button>
413471
</>
414472
) : (
@@ -424,6 +482,7 @@ const RoomsContainer = () => {
424482
onChange={(e) => dispatch(setUserName(e.target.value))}
425483
/>
426484
<TextField
485+
error={isCollabRoomTaken}
427486
fullWidth
428487
hiddenLabel={true}
429488
id="filled-hidden-label-small"
@@ -434,33 +493,68 @@ const RoomsContainer = () => {
434493
onChange={(e) => dispatch(setRoomCode(e.target.value))}
435494
className="enterRoomInput"
436495
onKeyDown={handleKeyDown}
496+
helperText={isCollabRoomTaken ? 'Room name already taken' : ''}
437497
/>
438-
<TextField
439-
fullWidth
440-
hiddenLabel={true}
441-
id="filled-hidden-label-small"
442-
variant="standard"
443-
size="small"
444-
value={roomCode}
445-
placeholder="Password"
446-
onChange={(e) => dispatch(setPassword(e.target.value))}
447-
// className="enterRoomInput"
448-
/>
498+
{isJoinCallabRoom ? (
499+
<TextField
500+
error={isPasswordAttemptIncorrect === false}
501+
fullWidth
502+
hiddenLabel={true}
503+
id="filled-hidden-label-small"
504+
variant="standard"
505+
size="small"
506+
value={joinedPasswordAttempt}
507+
placeholder="Password"
508+
helperText={
509+
isPasswordAttemptIncorrect === false
510+
? 'Incorrect password.'
511+
: ''
512+
}
513+
onChange={(e) => setJoinedPasswordAttempt(e.target.value)}
514+
/>
515+
) : (
516+
<TextField
517+
fullWidth
518+
hiddenLabel={true}
519+
id="filled-hidden-label-small"
520+
variant="standard"
521+
size="small"
522+
value={roomPassword}
523+
placeholder="Password"
524+
onChange={(e) => dispatch(setPassword(e.target.value))}
525+
/>
526+
)}
527+
449528
<Button
450529
variant="contained"
451-
disabled={checkInputField(userName, roomCode)}
530+
disabled={checkInputField(userName, roomCode, roomCode)}
452531
fullWidth
453-
onClick={() => joinRoom()}
532+
onClick={(e) =>
533+
isJoinCallabRoom
534+
? joinExistingCollabRoom()
535+
: createNewCollabRoom()
536+
}
454537
sx={{
455538
backgroundColor: '#e9e9e9',
456-
color: '#354e9c',
539+
color: '#253b80',
457540
'&:hover': {
458-
backgroundColor: '#354e9c'
541+
backgroundColor: '#99d7f2'
459542
}
460543
}}
461544
>
462-
Join Room
545+
{isJoinCallabRoom ? 'Join' : 'Start'}
463546
</Button>
547+
<Typography
548+
onClick={() => setIsJoinCollabRoom(!isJoinCallabRoom)}
549+
sx={{
550+
color: 'grey',
551+
'&:hover': {
552+
textDecoration: 'underline'
553+
}
554+
}}
555+
>
556+
{isJoinCallabRoom ? 'Start a new room' : 'Join a room'}
557+
</Typography>
464558
</>
465559
)}
466560
</Stack>

0 commit comments

Comments
 (0)