-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapp.js
More file actions
105 lines (81 loc) · 2.63 KB
/
Copy pathapp.js
File metadata and controls
105 lines (81 loc) · 2.63 KB
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
const path = require("path");
const http = require("http");
const express = require("express");
const socketIO = require("socket.io");
var moment = require("moment");
//Static path
const publicPath = path.join(__dirname, "/public");
const {isRealString} = require('./public/js/utils/validation');
const {Users} = require('./public/js/utils/users');
const SYSTEM_ALIAS = "Campfire";
// process.env.PORT lets the port be set by Heroku
var port = process.env.PORT || 3000;
// Setup
var app = express();
var server = http.createServer(app);
var io = socketIO(server);
var users = new Users();
// Static files.
app.use(express.static(publicPath));
io.on("connection", socket => {
// Join page event
socket.on('join',(params,callback) => {
if (!isRealString(params.name) || !isRealString(params.room)) {
return callback('Name and room name are required.');
}
socket.join(params.room);
users.removeUser(socket.id);
users.addUser(socket.id, params.name, params.room);
io.to(params.room).emit('updateUserList', users.getUserList(params.room));
// Send join message by admin [Admin]: X is joined.
socket.broadcast.to(params.room).emit("chat", {
message: `${params.name} has joined the room.`,
username: SYSTEM_ALIAS
});
callback();
});
// Handle chat event
socket.on("chat", data => {
var user = users.getUser(socket.id);
if(user && isRealString(data.message)) {
data.username = user.name;
data.time = moment().valueOf();
io.to(user.room).emit("chat", data);
}
});
// Handle typing event
socket.on("typing", data => {
var user = users.getUser(socket.id);
socket.broadcast.to(user.room).emit("typing", data);
});
// Handle video changed event
socket.on("videoChange", data => {
var user = users.getUser(socket.id);
console.log("Video Changed event emitted");
io.to(user.room).emit("videoChange", data);
});
// Handle player events
socket.on("pause-video", data => {
io.to(data.room).emit("pause-video");
});
socket.on("play-video", data => {
io.to(data.room).emit("play-video");
});
socket.on("seek", data => {
var user = users.getUser(socket.id);
io.to(user.room).emit("seek",data);
})
socket.on("disconnect", () => {
var user = users.removeUser(socket.id);
if(user) {
io.to(user.room).emit("updateUserList", users.getUserList(user.room));
socket.broadcast.to(user.room).emit("chat", {
message: `${user.name} has left the room.`,
username: SYSTEM_ALIAS
});
}
})
});
server.listen(port, () => {
console.log("Server is up and running on port", port);
});