Skip to content

Commit a841bff

Browse files
committed
Added participant list to backend
1 parent 15bd54c commit a841bff

File tree

8 files changed

+238
-85
lines changed

8 files changed

+238
-85
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
**/node_modules
22
.vscode
3-
**/.env
3+
**/.env
4+
.DS_Store

backend/server/index.js

+43-24
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,60 @@
1-
const app = require('express')()
2-
const server = require('http').createServer(app)
3-
const io = require('socket.io')(server)
4-
const cors = require('cors');
1+
const app = require("express")();
2+
const server = require("http").createServer(app);
3+
const io = require("socket.io")(server);
4+
const cors = require("cors");
55

6+
// set up domain for local development
7+
io.origins(["http://localhost:3000"]);
68

79
app.use(cors());
810

9-
io.on('connection', socket => {
10-
11+
io.on("connection", (socket) => {
1112
let roomId = 0;
1213
let userName = "";
13-
1414
//joining in a room
15-
socket.on('joinroom', function(data) {
16-
roomId = data.room;
17-
userName = data.name;
15+
socket.on("joinroom", function (data) {
16+
const { name, room } = data;
17+
roomId = room;
18+
userName = name;
19+
20+
socket.userName = name;
1821
socket.join(roomId);
19-
socket.to(roomId).emit('userjoined', userName)
22+
23+
console.log(socket.id, data);
24+
// add user
25+
var clients = io.sockets.adapter.rooms[roomId].sockets;
26+
console.log(clients);
27+
let users = {};
28+
for (clientId in clients) {
29+
//this is the socket of each client in the room.
30+
const clientSocket = io.sockets.connected[clientId];
31+
if (clientSocket.userName) users[clientId] = clientSocket.userName;
32+
};
33+
34+
console.log(users);
35+
socket.emit("Users Data", users);
36+
socket.to(roomId).emit("userjoined", userName);
2037
});
2138

22-
socket.on('message', (message) => {
23-
socket.to(roomId).emit('message', message)
24-
})
39+
socket.on("message", (message) => {
40+
console.log(message);
41+
socket.to(roomId).emit("message", message);
42+
});
2543

26-
socket.on('chatmessage', (data) => {
27-
socket.to(roomId).emit('chatmessage', data)
28-
})
44+
socket.on("chatmessage", (data) => {
45+
console.log(data);
46+
socket.to(roomId).emit("chatmessage", data);
47+
});
2948

30-
socket.on('disconnect', function() {
31-
socket.to(roomId).emit('userleft', userName)
32-
})
33-
})
49+
socket.on("disconnect", function () {
50+
socket.to(roomId).emit("userleft", userName);
51+
});
52+
});
3453

3554
app.get("/", (req, res) => {
3655
res.send({ response: "Server is up and running." }).status(200);
3756
});
3857

39-
server.listen(process.env.PORT || 4000, function() {
40-
console.log('server is working')
41-
})
58+
server.listen(process.env.PORT || 4000, function () {
59+
console.log("server is working");
60+
});

frontend/syntaxmeets/package-lock.json

+54-21
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

frontend/syntaxmeets/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"@testing-library/react": "^9.5.0",
1111
"@testing-library/user-event": "^7.2.1",
1212
"ace-builds": "^1.4.12",
13-
"axios": "^0.21.0",
13+
"axios": "^0.21.1",
1414
"bootstrap": "^4.5.3",
1515
"copy-to-clipboard": "^3.3.1",
1616
"fontsource-poppins": "^3.0.9",

frontend/syntaxmeets/src/components/Navbar/Navbar.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import copy from "copy-to-clipboard";
88
import About from '../About/About.js';
99
import CloseIcon from '@material-ui/icons/Close';
1010
import Slide from '@material-ui/core/Slide';
11+
import ParticpantsList from "../SyntaxChat/ParticipantsList";
1112

1213
const Transition = React.forwardRef(function Transition(props, ref) {
1314
return <Slide direction="up" ref={ref} {...props} />;
@@ -19,7 +20,7 @@ const Navbar = (props) => {
1920
const Copytext = (value) => {
2021
copy(value);
2122
alert("Copied Room ID : " + value)
22-
}
23+
};
2324

2425
const [open, setOpen] = React.useState(false);
2526

@@ -54,6 +55,7 @@ const Navbar = (props) => {
5455
RoomId : {props.roomId}
5556
</Button>
5657
<SyntaxChat name = {props.name} roomId = {props.roomId} socket = {props.socket} />
58+
<ParticpantsList socket = {props.socket} users={props.users} />
5759
<Button variant="contained" onClick={handleClickOpen} color = "secondary" style={{ 'fontFamily': "poppins", 'marginLeft': "15px", 'fontWeight': "600", 'color': "white" }}>
5860
About Us
5961
</Button>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import React, { useState } from "react";
2+
import GroupIcon from "@material-ui/icons/Group";
3+
import {
4+
ListItem,
5+
ListItemText,
6+
ListItemAvatar,
7+
Avatar,
8+
Button,
9+
Drawer,
10+
Typography,
11+
Divider,
12+
List
13+
} from "@material-ui/core";
14+
15+
function ParticipantsList(props) {
16+
const { users } = props;
17+
const [openList, setOpenList] = useState(false);
18+
// console.log(users);
19+
const renderParticipants = () => {
20+
console.log(users);
21+
return Object.keys(users).map((elem) => {
22+
const name = users[elem];
23+
console.log(name);
24+
return (
25+
<>
26+
<ListItem alignItems="flex-start">
27+
<ListItemAvatar>
28+
<Avatar alt="Travis Howard" src="/static/images/avatar/2.jpg" />
29+
</ListItemAvatar>
30+
<ListItemText
31+
primary={name}
32+
/>
33+
</ListItem>
34+
<Divider variant="inset" component="li" />
35+
</>
36+
);
37+
});
38+
};
39+
return (
40+
<div>
41+
<Button
42+
onClick={() => setOpenList(true)}
43+
variant="contained"
44+
color="primary"
45+
startIcon={<GroupIcon />}
46+
style={{
47+
fontFamily: "poppins",
48+
marginLeft: "15px",
49+
fontWeight: "600",
50+
color: "white",
51+
}}
52+
>
53+
Participants
54+
</Button>
55+
<Drawer
56+
anchor={"right"}
57+
open={openList}
58+
onClose={() => setOpenList(false)}
59+
>
60+
<div
61+
style={{ display: "flex", flexDirection: "column" }}
62+
role="presentation"
63+
>
64+
Participants
65+
<List>{renderParticipants()}</List>
66+
</div>
67+
</Drawer>
68+
</div>
69+
);
70+
}
71+
72+
export default ParticipantsList;

frontend/syntaxmeets/src/components/SyntaxChat/SyntaxChat.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const SyntaxChat = (props) => {
2323
const [messages, setMessages] = useState([]);
2424

2525
const messagesEndRef = useRef(null);
26-
26+
2727
const [mCount, setMCount] = useState(0);
2828
const [state, setState] = useState(false);
2929

@@ -34,6 +34,7 @@ const SyntaxChat = (props) => {
3434
roomId: props.roomId,
3535
message: message,
3636
};
37+
console.log(data);
3738
props.socket.emit("chatmessage", data);
3839
setMessages(messages => [ ...messages, data ]);
3940
setMCount(mCount + 1);
@@ -42,6 +43,7 @@ const SyntaxChat = (props) => {
4243

4344
useEffect(() => {
4445
props.socket.on("chatmessage", (data) => {
46+
console.log("The new is message are:",data);
4547
setMessages(messages => [ ...messages, data ]);
4648
});
4749
}, []);

0 commit comments

Comments
 (0)