-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
executable file
·84 lines (66 loc) · 2.31 KB
/
server.js
File metadata and controls
executable file
·84 lines (66 loc) · 2.31 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
const express = require("express");
const bodyParser = require("body-parser");
const socket = require('socket.io');
const jwt = require('jsonwebtoken');
const socketioJwt = require('socketio-jwt');
const helpers = require('./app/helpers/functions');
const app = express();
// parse requests of content-type - application/json
app.use(bodyParser.json());
app.set('trust proxy', true);
const db = require("./app/models");
db.sequelize.sync();
// simple route
app.get("/", (req, res) => {
res.json({message: "Server is up and running."});
});
require("./app/routes/user.routes.js")(app);
// set port, listen for requests
const PORT = process.env.PORT || 8080;
let server = app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}.`);
});
let io = socket(server);
io.set('authorization', socketioJwt.authorize({
secret: 'varvar',
handshake: true
}));
let onlineUsers = {};
io.on('connection', function (socket) {
//Add new connected user to users object
let decoded = jwt.verify(socket.handshake.query.token, 'varvar');
io.emit('message', `${decoded.name} connected`);
if(decoded.lastLogin){
io.to(socket.id).emit('message', `Welcome ${decoded.name}! Your last visit was on ${decoded.lastLogin} from IP: ${decoded.ip}`);
} else{
io.to(socket.id).emit('message', `Welcome ${decoded.name}! This is your first visit! Your IP: ${decoded.ip}`);
}
onlineUsers[socket.id] = decoded.id;
socket.on('disconnect', () => {
delete onlineUsers[socket.id];
});
// emit message to all clients except sender
socket.on('blast', (data) => {
socket.broadcast.emit('message', data);
});
// emit a message to a random user
socket.on('spin', (data) => {
let randomClient = helpers.randomProperty(onlineUsers,socket.id,1);
if(randomClient[0]){
socket.broadcast.to(randomClient[0]).emit('message', data);
}
});
// emit a message to X random users. X will be determined by the client.
socket.on('wild', (data) => {
let usersCount = 5;
if(data.usersNumber && !isNaN(data.usersNumber))
usersCount = Number(data.usersNumber);
let randomClients = helpers.randomProperty(onlineUsers,socket.id,usersCount);
if(randomClients.length > 0){
randomClients.forEach(element => {
socket.broadcast.to(element).emit('message', data.message || '');
});
}
});
});
module.exports = server;