Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require('dotenv').config();
- var app = require('express')();
- var server = require('http').Server(app);
- var io = require('socket.io')(server);
- var mysql = require('mysql');
- var Redis = require('ioredis');
- var redisClient = Redis.createClient();
- /////////////////////////// Mysql Connection ////////////////////////////////
- var db_config = {
- host: process.env.DB_HOST,
- user: process.env.DB_USERNAME,
- password: process.env.DB_PASSWORD,
- database: process.env.DB_DATABASE
- };
- var con;
- function handleDisconnect() {
- con = mysql.createConnection(db_config); // Recreate the connection, since
- // the old one cannot be reused.
- con.connect(function(err) { // The server is either down
- if(err)
- { // or restarting (takes a while sometimes).
- console.log('error when connecting to db:', err.message);
- setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,
- }
- else
- {
- console.log("DB Connected!");
- } // to avoid a hot loop, and to allow our node script to
- }); // process asynchronous requests in the meantime.
- con.on('error', function(err) {
- console.log('db error', err);
- if(err.code === 'PROTOCOL_CONNECTION_LOST')
- { // Connection to the MySQL server is usually
- handleDisconnect(); // lost due to either server restart, or a
- }
- else
- { // connnection idle timeout (the wait_timeout
- console.log("Mysql Error - ",err.message);
- throw err; // server variable configures this)
- }
- });
- }
- handleDisconnect();
- /////////////////////////// Mysql Connection ////////////////////////////////
- var port_number = process.env.SOCKET_IO_PORT || 8080;
- server.listen(port_number, function(){
- console.log("Listening on localhost:"+port_number)
- });
- /////////////////////////////////////// App Chat //////////////////////////////////////////////////////////
- var redisClient = Redis.createClient();
- redisClient.subscribe('message');
- redisClient.on("message", function(channel, data) {
- var tempdata = JSON.parse(data);
- var ids = JSON.parse(tempdata.socket_ids)
- console.log("New Message in queue "+ typeof ids, ', ', ids);
- ids.forEach(function(id){
- try{
- io.sockets.connected[id].emit('message', tempdata);
- }
- catch(e)
- {
- console.log('Socket Emit Error - '+e);
- }
- });
- });
- /////////////////////////////////////// App Chat //////////////////////////////////////////////////////////
- io.on('connect', function (socket) {
- /////////////////////////////////////////////////////
- ////////////////// Add User Event /////////////////////////////////
- socket.on('add-user', function(data)
- {
- if(!data.user_id)
- console.log('User Id is Required');
- else if(!data.api_token)
- console.log('User Api Token is Required');
- else
- {
- // console.log(data);
- var user = con.query("SELECT * FROM user_devices WHERE user_id= '"+data.user_id+"' AND api_token='"+data.api_token+"' ", function(error, results, fields){
- if(error)
- {
- console.log(error.message);
- }
- else if(results == undefined || results.length == 0)
- {
- console.log("No Device Token Found");
- }
- else
- {////////////// Update user //////////////////////
- var update_device = con.query("UPDATE user_devices SET socket_id='"+data.socket_id+"' WHERE id="+results[0].id+" ", function(ierror, iresults, ifields){
- if(ierror)
- {
- console.log(ierror.message);
- }
- else
- {
- console.log("Socket ID Connected Successfully");
- }
- // console.log(results, iresults, ifields);
- });
- }////////////// Update user //////////////////////
- });
- }
- });
- ////////////////// Add User Event /////////////////////////////////
- /////////////////////////////////////////////////////
- //Removing the socket on disconnect
- socket.on('disconnect', function()
- {
- var update_device = con.query("UPDATE user_devices SET socket_id='' WHERE socket_id='"+socket.id+"' ", function(ierror, iresults, ifields)
- {
- if(ierror)
- {
- console.log(ierror.message);
- }
- else
- {
- console.log("Socket Disconnected Successfully");
- }
- // console.log(results, iresults, ifields);
- });
- });
- });
Add Comment
Please, Sign In to add comment