-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
105 lines (85 loc) · 2.45 KB
/
index.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
var express = require("express"),
http = require("http");
//make sure you keep this order
var app = express();
var server = http.createServer(app);
const io = require("socket.io")(server);
// const {
// exportUser,
// queryUser,
// userLeave,
// getAllUsers,
// } = require("./functions/users");
const {
newUser,
getGlobalUsers,
userExit,
getUsersByRoom,
queryUser,
} = require("./functions/backControls");
app.set("view engine", "ejs");
app.use(express.static("views"));
// Null Indexed
app.get("/", (req, res) => {
res.redirect(`/create`);
});
app.get("/docs", (req, res) => {
res.render("docs");
});
// Creation entrypoint
//* Render pattern: Backend > frontend > views > [EJS Engine] > Files
app.get("/create", (req, res) => {
res.render("create.ejs");
});
let name = null;
app.get("/join/:room", (req, res) => {
res.render("join.ejs", { room: req.params.room });
});
app.get("/room-primary/:name/:room", (req, res) => {
name = req.params.name;
res.redirect(`/room/${req.params.room}`);
});
app.get("/room/:room", (req, res) => {
if (name === null) {
res.redirect(`/join/${req.params.room}`);
}
res.render("room.ejs", { room: req.params.room, name: name });
name = null;
});
io.on("connection", function (socket) {
let ROOM;
//* On creation of new chat room
socket.on("join-room", (room, name) => {
const user = newUser(socket.id, name, room);
socket.join(room);
ROOM = room;
io.to(room).emit("new-connection", name);
io.to(room).emit("users", getUsersByRoom(room));
});
socket.on("send", (data) => {
io.to(ROOM).emit("message", data);
});
socket.on("leaving", (name) => {
userExit(socket.id);
io.to(ROOM).emit("users", getUsersByRoom(ROOM));
io.to(ROOM).emit("disconnection", name);
});
socket.on("typing-out", (sender) => {
io.to(ROOM).emit("typing-in", sender);
});
socket.on("typing-stopped", () => {
io.to(ROOM).emit("hide-typing");
});
socket.on("disconnect", () => {
const name = queryUser(socket.id);
if (name !== undefined) {
console.log(`${name} disconnected...`);
userExit(socket.id);
io.to(ROOM).emit("users", getUsersByRoom(ROOM));
io.to(ROOM).emit("disconnection", name);
}
});
});
server.listen(process.env.PORT || 3000, () => {
console.log("SERVER ONLINE");
});