This commit is contained in:
Henry Hiles 2022-01-27 11:17:37 -05:00
parent d8146c3723
commit abdffe2e7a
7 changed files with 1184 additions and 51 deletions

View file

@ -1,27 +1,71 @@
const io = require("socket.io")(3000, {
const express = require("express")
const app = express()
const server = require("http").Server(app)
const io = require("socket.io")(server, {
cors: {
origin: [
"http://localhost:5500",
"http://127.0.0.1:5500",
"http//192.168.1.226:5500",
"http//192.168.1.226:5500",
],
},
})
const users = {}
app.set("views", "./views")
app.set("view engine", "ejs")
app.use(express.static("public"))
app.use(express.urlencoded({ extended: true }))
const getUserRooms = (socket) =>
Object.entries(rooms).reduce((names, [name, room]) => {
if (room.users[socket.id] != null) names.push(name)
return names
}, [])
const rooms = {}
app.get("/", (_, res) => {
res.render("index", { rooms: rooms })
})
app.post("/room", (req, res) => {
if (rooms[req.body.room] != null) {
return res.redirect("/")
}
rooms[req.body.room] = { users: {} }
res.redirect(req.body.room)
io.emit("room-created", req.body.room)
})
app.get("/:room", (req, res) => {
if (rooms[req.params.room] == null) {
return res.redirect("/")
}
res.render("room", { roomName: req.params.room })
})
server.listen(3000)
io.on("connection", (socket) => {
socket.on("new-user", (name) => {
users[socket.id] = name
socket.broadcast.emit("user-connected", name)
socket.on("new-user", (room, name) => {
socket.join(room)
rooms[room].users[socket.id] = name
socket.broadcast.to(room).emit("user-connected", name)
})
socket.on("send-chat-message", (message) =>
socket.broadcast.emit("chat-message", message, users[socket.id])
socket.on("send-chat-message", (room, message) => {
socket.broadcast
.to(room)
.emit("chat-message", message, rooms[room].users[socket.id])
})
socket.on("disconnect", () =>
getUserRooms(socket).forEach((room) => {
socket.broadcast
.to(room)
.emit("user-disconnected", rooms[room].users[socket.id])
delete rooms[room].users[socket.id]
})
)
socket.on("disconnect", () => {
socket.broadcast.emit("user-disconnected", users[socket.id])
delete users[socket.id]
})
})