-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.js
143 lines (103 loc) · 3.34 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
const express = require('express')
const passport = require('passport')
const session = require('express-session')
const RedisStore = require('connect-redis')(session)
const app = express()
const mysql = require('mysql')
const fs = require('fs')
let config = require('./config.js')
let connection = mysql.createConnection(config)
//Sets the template engine ejs
app.set('view engine', 'ejs')
//session middleware
app.use(session({
store: new RedisStore({
url: config.redisStore.url
}),
secret: config.redisStore.secret,
resave: false,
saveUninitialized: false
}))
app.use(passport.initialize())
app.use(passport.session())
//Middleware
app.use(express.static('public'))
//Simple request time logger
app.use(function(req, res, next) {
console.log(`Middleware`)
console.log(`req: ${req}`)
console.log(`res: ${res}`)
console.log(`Url: ${req.url}`);
//This function call is very important. It tells that more processing is
//required for the current request and is in the next middleware
next();
});
//Routes
app.get('/', (req, res) =>{
console.log(`get "/", req: ${req}, res: ${res}`)
res.render('index')
} )
let PORT = 1337
server = app.listen(PORT)
console.log(`Listen on port ${PORT}`)
const io = require("socket.io")(server)
//const hist = []
let obj = {
hist: []
};
//Listen for a new connection
io.on('connection', (socket) => {
console.log('io event: connection')
console.log('New user connected. Socket id: ', socket.id)
socket.username = "Anonymous"
send_hist(socket)
socket.on('change_username', (data) => {
console.log('io event: change_username')
socket.username = data.username
})
//listen on new_message
socket.on('new_message', (data) => {
console.log('io event: new_message')
//broadcast the new message
io.sockets.emit('new_message', {message : data.message, username : socket.username})
var msg = data
//MySQL data upload
let config = require('./config.js');
let connection = mysql.createConnection(config);
// insert statment
let stmt = `INSERT INTO logs(username,message)
VALUES(?,?)`;
let inpt = [socket.username, msg.message];
// execute the insert statment
connection.query(stmt, inpt, (err, results, fields) => {
if (err) {
return console.error(err.message);
}
// get inserted id
console.log('Message Id:' + results.insertId);
});
connection.end();
})
//listen on typing
socket.on('typing', (data) => {
console.log('io event: typing')
socket.broadcast.emit('typing', {username : socket.username})
})
})
function send_hist (socket){
console.log('send_hist()')
//Sending history to a single socket from MySQL
let config = require('./config.js');
let connection = mysql.createConnection(config);
let sql = `SELECT username, message FROM logs`;
connection.query(sql, (error, results, fields) => {
if (error) {
return console.error(error.message);
}
//console.log(results);
results.forEach(element => {
io.to(socket.id).emit('new_message', element);
});
});
connection.end();
}