-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
83 lines (71 loc) · 2.12 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
const express = require("express")
const app = express()
const http = require("http")
const server = http.createServer(app)
const { Server } = require("socket.io")
const io = new Server(server)
const { v4: uuidv4 } = require('uuid');
app.get("/", (req, res) => {
res.sendFile(__dirname + "/client/index.html")
})
// Socket.io
let sockets = []
let avaliableRooms = []
io.on("connection", (socket) => {
sockets = [...sockets, socket]
const leaveAllRoom = () => {
socket.rooms.forEach((room) => {
socket.leave(room)
})
}
socket.on("create room", () => {
leaveAllRoom()
const roomId = uuidv4()
if (!avaliableRooms.includes(roomId)) {
avaliableRooms = [...avaliableRooms, roomId]
}
socket.join(roomId)
io.to(roomId).emit("chat message", "Creating new room: " + roomId)
})
socket.on("join random", () => {
leaveAllRoom()
if (avaliableRooms.length > 0) {
const roomId = avaliableRooms[Math.floor(Math.random() * avaliableRooms.length)]
avaliableRooms = avaliableRooms.filter((room) => room !== roomId)
socket.join(roomId)
} else {
socket.emit("send message", "No avaliable rooms here")
}
})
socket.on("chat message", (msg) => {
console.log(socket.rooms)
socket.rooms.forEach((room) => {
io.to(room).emit("send message", `${socket.id}: ${msg}`)
})
})
socket.on("send message", (msg) => {
socket.emit("send message", msg)
})
socket.on("disconnecting", () => {
console.log(socket.rooms) // the Set contains at least the socket ID
})
socket.on("disconnect", () => {
if (socket.rooms.size > 0) leaveAllRoom()
})
})
// Room events
io.of("/").adapter.on("create-room", (room) => {
if (avaliableRooms.includes(room)) {
console.log(`room ${room} was created`)
}
})
io.of("/").adapter.on("join-room", (room, id) => {
console.log(`socket ${id} has joined room ${room}`)
io.to(room).emit("send message", `${id} has joined room ${room}`)
})
io.of("/").adapter.on("leave-room", (room, id) => {
console.log(`socket ${id} has leaved room ${room}`)
})
server.listen(3000, () => {
console.log("listening on *:3000")
})