Edit File: server.js
const fs = require('fs'); const http = require('http'); const https = require('https'); const express = require('express'); let newUsers = {}; let order_id = 0; const app = express(); const privateKey = fs.readFileSync('/var/cpanel/ssl/apache_tls/marsolnew.4hoste.com/combined', 'utf8'); const certificate = fs.readFileSync('/var/cpanel/ssl/apache_tls/marsolnew.4hoste.com/certificates', 'utf8'); const ca = fs.readFileSync('/var/cpanel/ssl/apache_tls/marsolnew.4hoste.com/combined', 'utf8'); const httpsServer = https.createServer({ key : privateKey, cert : certificate, ca : ca }, app).listen(4603, () => { console.log('HTTPS Server running on port 4603'); }); const httpServer = http.createServer(app).listen(9063, (req,res) => { console.log('HTTP Server running on port 9063'); }); var socketIO = require('socket.io'); const io = socketIO(httpsServer); var mysql = require('mysql'); connection = mysql.createConnection({ host : 'localhost', user : 'marsolne_marsolnewnew', password : '2ql)2nFdp{]0', database : 'marsolne_marsol', charset : 'utf8mb4' }); connection.connect(function(err) { if (err) throw err; console.log("database Connected!"); }); let users = []; let conversations = []; let auctionproducts = []; io.on('connection', function (socket) { socket.on('connect',msg=>{ console.log("I feel like connected"); }); if(connection.state === 'disconnected'){ connection = mysql.createConnection({ host : 'localhost', user : 'marsolne_marsolnewnew', password : '2ql)2nFdp{]0', database : 'marsolne_marsol', charset : 'utf8mb4' }); connection.connect(); console.log('new db connection '); } //send message socket.on("sendMessage",(data)=>{ console.log('sendMessage'); console.log(data); if(connection.state === 'disconnected'){ connection = mysql.createConnection({ host : 'localhost', user : 'marsolne_marsolnewnew', password : '2ql)2nFdp{]0', database : 'marsolne_marsol', charset : 'utf8mb4' }); connection.connect(); console.log('new db connection '); } if(typeof data.time_zone != 'undefined'){ var timeZoneConst= "Asia/Riyadh"; var usertimezone = new Date().toLocaleString("en-US", {timeZone:timeZoneConst}); var created_at = new Date(usertimezone); //var created_at = "Asia/Riyadh"; console.log('data.time_zone:'+data.time_zone); } else{ let date = require('date-and-time'); let now = new Date(); var timeZoneConst= "Asia/Riyadh"; var usertimezone = new Date().toLocaleString("en-US", {timeZone: timeZoneConst}); var created_at = new Date(usertimezone); } connection.query('INSERT INTO room_messages SET ?', {room_id: data.room_id,receiver_id: data.receiver_id,sender_id:data.sender_id,type:data.type,content:data.content,duration:data.duration,created_at:created_at}, function (error, results, fields) { if (error) throw error; }); if(data.type == 'image' || data.type=='sound'){ var url = 'https://marsolnew.4hoste.com/assets/uploads/chat/'+data.content; data.content = url; } console.log("newUsers",newUsers) if(data.receiver_id in newUsers){ console.log("sendSocket") if(data.room_id in newUsers[data.receiver_id]){ console.log("1=========>") newUsers[data.receiver_id][data.room_id].emit("newMessage",data); } } else{ console.log("sendNotification") //send fcm notification var FCM = require('fcm-node'); var serverKey = 'AAAAyOwGZX0:APA91bFVe984GHYDpAHxI0LagV-TUq3q80vv8kTdg0P8r45x5-eW9ss3Hh9UdWDgnZCaGLbbQ0IeFP1H_eMCqaj93EElLVhV3hod_E4tiZ8JxHIYlX7whHQmRO25eAfJMjQ4X0fDlQnf'; //put your server key here var fcm = new FCM(serverKey); connection.query("SELECT name,avatar From users Where id = "+ data.sender_id, function (err, row) { if (err) throw err; sendername = row[0].name; connection.query("SELECT order_id From rooms Where id = "+ data.room_id, function (err, result) { if (err) throw err; order_id = result[0].order_id; connection.query("SELECT * From devices Where user_id = "+ data.receiver_id, function (err, results) { if (err) throw err; // connection.end(); results.forEach((row) => { if(data.type == 'map'){ message_ar = 'قام بارسال الموقع'; message_en = 'send you location'; }else if(data.type == 'image'){ message_ar = 'قام بارسال صورة'; message_en = 'send you image'; }else if(data.type == 'sound'){ message_ar = 'قام بارسال تسجيل صوتي'; message_en = 'send you sound record'; }else{ message_ar = data.content; message_en = data.content; } if(row.device_type == 'ios'){ var message = { //this may vary according to the message type (single recipient, multicast, topic, et cetera) to: row.device_id, notification: { title: sendername, body: message_ar, sound: "default" }, data: { //you can send only notification or only data(or include both) sender : data.sender_id, sender_name : sendername, title : sendername, title_ar : sendername, title_en : sendername, message_ar : message_ar, message_en : message_en, msg_type : data.type, order_id : order_id, order_type : null, order_status : null, room_id : data.room_id, receiver_id : data.receiver_id, type : 'new_message' } }; }else{ var message = { //this may vary according to the message type (single recipient, multicast, topic, et cetera) to: row.device_id, notification: null, data: { //you can send only notification or only data(or include both) sender : data.sender_id, sender_name : sendername, title : sendername, title_ar : sendername, title_en : sendername, message_ar : message_ar, message_en : message_en, msg_type : data.type, order_id : order_id, order_type : null, order_status : null, room_id : data.room_id, receiver_id : data.receiver_id, type : 'new_message' } }; } fcm.send(message, function(err, response){ if (err) { // console.log("Something has gone wrong!"); } else { // console.log("Successfully sent with response: ", response); } }); }); }); }) //end send fcm }); } }) socket.on('sendFile', function(data, buffer) { if(users.includes(data.sender_id.toString()) && conversations.includes(data.room_id.toString())){ if(connection.state === 'disconnected'){ connection = mysql.createConnection({ host : 'localhost', user : 'marsolne_marsolnewnew', password : '2ql)2nFdp{]0', database : 'marsolne_marsol', charset : 'utf8mb4' }); connection.connect(); console.log('new db connection '); } var url = 'https://marsolnew.4hoste.com/assets/uploads/chat/'+data.content; connection.query('INSERT INTO room_messages SET ?', {room_id: data.room_id,receiver_id: data.receiver_id,sender_id:data.sender_id,type:data.type,content:data.content}, function (error, results, fields) { console.log(error) }); socket.broadcast.emit("newMessage",data); }else{ console.log("message failed"); } }); // enter chat socket.on("adduser",function(data){ console.log("adduser",data) // the code of new user add for single room if(!(data.user_id in newUsers)){ newUsers[data.user_id] = {}; } newUsers[data.user_id][data.room_id] = socket; socket.newUser_id = data.user_id; // end code // if(! users.includes(data.user_id.toString())){ // users.push(data.user_id.toString()); // } // if(data.room_id){ // if(! conversations.includes(data.room_id.toString())){ // conversations.push(data.room_id.toString()); // } // } // socket.user_id = data.user_id.toString(); socket.room_id = data.room_id.toString(); }); //existChat // socket.on('exitChat', function() { // console.log("exitChat") // if(users.includes(socket.user_id)){ // index = users.indexOf(socket.user_id); // if (index !== -1) users.splice(index, 1); // } // if(!(socket.newUser_id in newUsers)) return; // if(!(socket.room_id in newUsers[socket.newUser_id])) return; // delete newUsers[socket.newUser_id][socket.room_id]; // if(Object.keys(newUsers[socket.newUser_id]).length === 0){ // delete newUsers[socket.newUser_id]; // } // // } // }); /************************** update location *******************/ socket.on('updatelocation',function(data){ if(connection.state === 'disconnected'){ connection = mysql.createConnection({ host : 'localhost', user : 'marsolne_marsolnewnew', password : '2ql)2nFdp{]0', database : 'marsolne_marsol', charset : 'utf8mb4' }); connection.connect(); console.log('new db connection '); } // pool.getConnection(function(err,connection){ var tracker_id; connection.query('UPDATE users SET ? WHERE id = ?', [{lat:data.lat,long:data.long},data.user_id], function (error, results, fields) { // connection.query('UPDATE users SET ? WHERE UserID = :UserID',{UserID: userId, Name: name}) if (error) throw error; // console.log(results.affectedRows); }); connection.query('SELECT user_id From orders Where delegate_id = ? AND status= ? ',[data.user_id,'inprogress'], function (err, results) { if (err) throw err; // connection.end(); results.forEach((row) => { tracker_id = row.user_id; // console.log("user id :"+row.user_id); // console.log('provider id : '+data.user_id+' lat: '+data.lat+' lng: '+data.lng); if(tracker_id in newUsers){ if(data.user_id in newUsers[tracker_id]){ newUsers[tracker_id][data.user_id].emit("trackorder", {'user_id':data.user_id,"lat":data.lat,"long":data.long}); } } }); }); // });//end of pool connection }); socket.on("addtracker",function(data){ console.log('addtracker', data); if(!(data.tracker_id in newUsers)){ newUsers[data.tracker_id] = {}; } newUsers[data.tracker_id][data.user_id] = socket; socket.tracker = data.tracker_id; socket.userid = data.user_id; }); //disconnent socket // socket.on('disconnect', ()=>{ // console.log("disConnect"); // if(users.includes(socket.user_id)){ // index = users.indexOf(socket.user_id); // if (index !== -1) users.splice(index, 1); // } // if(!(socket.newUser_id in newUsers)) return; // if(!(socket.room_id in newUsers[socket.newUser_id])) return; // delete newUsers[socket.newUser_id][socket.room_id]; // if(Object.keys(newUsers[socket.newUser_id]).length === 0){ // delete newUsers[socket.newUser_id]; // } // }); socket.on('exitChat', function() { console.log("exitChat") console.log("newUsers",newUsers) if(!(socket.newUser_id in newUsers)) return; if(!(socket.room_id in newUsers[socket.newUser_id])) return; delete newUsers[socket.newUser_id][socket.room_id]; if(Object.keys(newUsers[socket.newUser_id]).length === 0){ delete newUsers[socket.newUser_id]; } console.log("newUsers",newUsers) // if ( typeof connection !== 'undefined' ){ if(connection.state === 'connected'){ connection.end(); console.log('databse closed'); } // } }); socket.on('disconnect', function() { console.log("disconnect") if(!(socket.newUser_id in newUsers)) return; if(!(socket.room_id in newUsers[socket.newUser_id])) return; delete newUsers[socket.newUser_id][socket.room_id]; if(Object.keys(newUsers[socket.newUser_id]).length === 0){ delete newUsers[socket.newUser_id]; } // if ( typeof connection !== 'undefined' ){ if(connection.state === 'connected'){ connection.end(); console.log('databse closed'); } // } }); });
Back to File Manager