338 lines
12 KiB
JavaScript
338 lines
12 KiB
JavaScript
const express = require("express");
|
|
const http = require('http');
|
|
const socketIO = require('socket.io');
|
|
const mysql = require("mysql");
|
|
const util = require('util');
|
|
|
|
const app = express();
|
|
const server = http.createServer(app);
|
|
const io = socketIO(server);
|
|
|
|
// io.attach(server, {
|
|
// pingInterval: 10000,
|
|
// pingTimeout: 5000,
|
|
// cookie: false
|
|
// });
|
|
|
|
|
|
const PORT = process.env.PORT || 5005;
|
|
|
|
let numUsers = 0;
|
|
|
|
app.use((request, result, next) => {
|
|
result.setHeader("Access-Control-Allow-Origin", "*");
|
|
next();
|
|
});
|
|
|
|
app.use(express.urlencoded({ extended: false }));
|
|
app.use(express.json());
|
|
|
|
const connection = mysql.createConnection({
|
|
"host": "localhost",
|
|
"user": "root",
|
|
"password": "",
|
|
"database": "db_t4b"
|
|
|
|
// "host": "localhost",
|
|
// "user": "tech4bizuserone",
|
|
// "password": "Mypassword02#",
|
|
// "database": "tech4biz"
|
|
});
|
|
|
|
connection.connect(function (error) {
|
|
if (error) console.log(error);
|
|
console.log("DB Connected!")
|
|
console.log('==============');
|
|
|
|
});
|
|
|
|
|
|
io.on("connection", (socket) => {
|
|
let addedUser = true;
|
|
//console.log("User connected:-", socket.id);
|
|
|
|
socket.on('disconnect', () => {
|
|
if (addedUser) {
|
|
--numUsers;
|
|
}
|
|
});
|
|
|
|
socket.on('user__connected', (data) => {
|
|
if (data.socket && data.email) {
|
|
let checkUser = "SELECT * FROM `chat_users` WHERE `email` = ?";
|
|
connection.query(checkUser, [data.email], (error, user) => {
|
|
if (error) {
|
|
io.to(data.socket).emit('server__error', `I'm Offline!`);
|
|
} else {
|
|
//io.to(data.socket).emit('server__error', `Hello `);
|
|
let isExists = user.length;
|
|
console.log(isExists)
|
|
if (isExists > 0) {
|
|
let updateSocketID = connection.query("UPDATE `chat_users` SET `socket` = ? WHERE `email` = ?", [data.socket, data.email], (error, result) => {
|
|
if (error) {
|
|
io.to(data.socket).emit('server__error', `I'm Offline!`);
|
|
} else {
|
|
io.to(data.socket).emit('user__connected', `Welcome back ${data.email}`);
|
|
}
|
|
});
|
|
} else {
|
|
let addUser = "INSERT INTO `chat_users` (`email`, `socket`) VALUES (?, ?)";
|
|
connection.query(addUser, [data.email, data.socket], (error, result) => {
|
|
if (error) {
|
|
io.to(data.socket).emit('server__error', `I'm Offline!`);
|
|
} else {
|
|
io.to(data.socket).emit('user__connected', `Welcome ${data.email}, Get Started with us`);
|
|
}
|
|
});
|
|
//io.to(data.socket).emit('user__connected', `Welcome ${data.email}, Get Started with us`);
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
io.to(data.socket).emit('server__error', `Refresh and Try again`);
|
|
}
|
|
});
|
|
|
|
|
|
socket.on('send__message', (data) => {
|
|
if (data.from && data.to && data.msg && data.socket) {
|
|
let storeMsg = "INSERT INTO `chat` (`from`, `to`, `message`, `send_by`) VALUES (?, ?, ?, ?)";
|
|
connection.query(storeMsg, [data.from, data.to, data.msg, data.send_by], (error, result) => {
|
|
if (error) {
|
|
console.log(error)
|
|
io.to(data.socket).emit('server__error', `I'm Offline!`);
|
|
} else {
|
|
io.to(data.socket).emit('send__message', data.msg);
|
|
|
|
let getAdminSocket = "SELECT `socket` FROM `chat_users` WHERE `email` = ?";
|
|
connection.query(getAdminSocket, ['admin'], (error, admin) => {
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
if (admin.length > 0) {
|
|
let adminSocket = admin[0].socket;
|
|
console.log(adminSocket);
|
|
//io.to(adminSocket).emit('receive__user__message', data);
|
|
|
|
let getUserID = "SELECT `id` FROM `chat_users` WHERE `email` = ? LIMIT 1";
|
|
connection.query(getUserID, [data.from], (error, user) => {
|
|
if (error) {
|
|
console.log('Error while Fetching UserID on send__message')
|
|
} else {
|
|
let userID = user[0].id;
|
|
data.user_id = userID;
|
|
io.to(adminSocket).emit('receive__user__message', data);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
})
|
|
}
|
|
});
|
|
} else {
|
|
io.to(data.socket).emit('server__error', `Refresh and Try again`);
|
|
}
|
|
});
|
|
|
|
socket.on('send__message__toAdmin', (data) => {
|
|
if (data.from && data.to && data.msg && data.socket) {
|
|
let storeMsg = "INSERT INTO `chat` (`from`, `to`, `message`, `send_by`) VALUES (?, ?, ?, ?)";
|
|
connection.query(storeMsg, [data.from, data.to, data.msg, data.send_by], (error, result) => {
|
|
if (error) {
|
|
console.log(error)
|
|
//io.to(data.socket).emit('server__error', `I'm Offline!`);
|
|
} else {
|
|
io.to(data.socket).emit('send__message__toAdmin', data.msg);
|
|
|
|
let getUserSocket = "SELECT `socket` FROM `chat_users` WHERE `email` = ?";
|
|
connection.query(getUserSocket, [data.to], (error, user) => {
|
|
if (error) {
|
|
console.log(error);
|
|
} else {
|
|
if (user.length > 0) {
|
|
let userSocket = user[0].socket;
|
|
console.log(userSocket);
|
|
io.to(userSocket).emit('receive__admin__message', data);
|
|
}
|
|
}
|
|
})
|
|
}
|
|
});
|
|
} else {
|
|
io.to(data.socket).emit('server__error', `Refresh and Try again`);
|
|
}
|
|
});
|
|
|
|
|
|
socket.on('fetch__users', async (data) => {
|
|
|
|
if (data.email && data.socket) {
|
|
// io.to(data.socket).emit('fetch__users', data);
|
|
const query = util.promisify(connection.query).bind(connection);
|
|
let obj = [];
|
|
|
|
await (async () => {
|
|
try {
|
|
const rows = await query("SELECT * FROM `chat_users` WHERE `email` <> 'admin'");
|
|
if (rows) {
|
|
for (let i = 0; i < rows.length; i++) {
|
|
|
|
obj.push({
|
|
"id": rows[i].id,
|
|
"email": rows[i].email,
|
|
"socket": rows[i].socket,
|
|
"created_at": rows[i].created_at,
|
|
"updated_at": rows[i].updated_at,
|
|
});
|
|
|
|
try {
|
|
let getLastMessage = "SELECT * FROM `chat` WHERE `from` = ? AND `to` = ? OR `from` = ? AND `to` = ? ORDER BY `id` DESC LIMIT 1";
|
|
let lm = await query(getLastMessage, [rows[i].email, 'admin', 'admin', rows[i].email]);
|
|
if (lm.length > 0) {
|
|
obj[i].last_msg = lm[0].message;
|
|
}
|
|
else {
|
|
obj[i].last_msg = '';
|
|
}
|
|
} catch (e) {
|
|
console.log(e.sqlMessage);
|
|
}
|
|
}
|
|
|
|
}
|
|
} catch (e) {
|
|
console.log(e.sqlMessage);
|
|
}
|
|
// finally {
|
|
// connection.end();
|
|
// }
|
|
})();
|
|
|
|
io.to(data.socket).emit('fetch__users', obj);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
socket.on('open__chatBox', (data) => {
|
|
|
|
if (data.email && data.socket) {
|
|
let fetchMessages = "SELECT * FROM `chat` WHERE `from` = ? AND `to` = ? OR `from` = ? AND `to` = ? ORDER BY `id`";
|
|
connection.query(fetchMessages, [data.email, 'admin', 'admin', data.email], (error, messages) => {
|
|
if (error) {
|
|
console.log('Error while fetching Messages');
|
|
} else {
|
|
let getUserID = "SELECT `id` FROM `chat_users` WHERE `email` = ? LIMIT 1";
|
|
connection.query(getUserID, [data.email], (error, user) => {
|
|
if (error) {
|
|
console.log('Error while Fetching UserID on open__chatBox')
|
|
} else {
|
|
let userID = user[0].id;
|
|
console.log({ data: data, msg: [], user_id: userID })
|
|
io.to(data.socket).emit('open__chatBox', { data: data, msg: messages, user_id: userID });
|
|
}
|
|
});
|
|
io.to(data.socket).emit('open__chatBox', { data: data, msg: messages });
|
|
}
|
|
});
|
|
|
|
}
|
|
});
|
|
|
|
socket.on('refreshUsers', (data) => {
|
|
console.log(data)
|
|
if (data.email) {
|
|
let getAdminSocket = "SELECT `socket` FROM `chat_users` WHERE `email` = 'admin'";
|
|
connection.query(getAdminSocket, [], (error, socket) => {
|
|
if (error) {
|
|
console.log('Error while Fetching Admin Socket on refreshUsers');
|
|
} else {
|
|
let adminSocket = socket[0].socket;
|
|
//io.to(adminSocket).emit('refreshUsers', data);
|
|
}
|
|
});
|
|
|
|
}
|
|
})
|
|
|
|
|
|
});
|
|
|
|
app.get('/fetchUsers', (req, res) => {
|
|
|
|
let getUsers = "SELECT * FROM `chat_users` WHERE `email` <> 'admin';"
|
|
connection.query(getUsers, [], (error, users) => {
|
|
if (error) {
|
|
res.status(500).json({
|
|
'code': 500
|
|
});
|
|
} else {
|
|
res.status(200).json({
|
|
'code': 200,
|
|
'users': users
|
|
});
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
app.post('/checkUser', (req, res) => {
|
|
|
|
let user = req.body.email;
|
|
|
|
if (user) {
|
|
let checkUser = "SELECT * FROM `chat` WHERE `from` = ?";
|
|
connection.query(checkUser, [user], (error, user) => {
|
|
let isExists = user.length;
|
|
if (isExists > 0) {
|
|
res.status(200).json({
|
|
'code': 200
|
|
});
|
|
} else {
|
|
res.status(200).json({
|
|
'code': 404
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
res.status(200).json({
|
|
'code': 404
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
|
|
app.post('/storeMessages', (req, res) => {
|
|
|
|
let msg = req.body.msg;
|
|
let from = req.body.from;
|
|
|
|
if (from && msg) {
|
|
|
|
let to = 'admin';
|
|
let insertMsg = "INSERT INTO `chat` (`from`, `to`, `message`) VALUES (?, ?, ?)";
|
|
connection.query(insertMsg, [from, to, msg], (err, result) => {
|
|
if (err) {
|
|
return res.status(200).json({
|
|
'code': 500
|
|
});
|
|
}
|
|
console.log(result);
|
|
return res.status(200).json({
|
|
'code': 200
|
|
});
|
|
});
|
|
|
|
} else {
|
|
return res.status(200).json({
|
|
'code': 400
|
|
});
|
|
}
|
|
|
|
});
|
|
|
|
|
|
server.listen(PORT, () => {
|
|
console.log(`Listening to port ${PORT}`);
|
|
}); |