Edit File: socket.js
'use strict'; /** * after server connect config connector data * update socket id to user id with user type * listen and emit events */ // import helper file with sql helper funcs const helper = require('./helper'); // const varaible const { addressMedia, timeZone } = require("./constVariables"); // get models const toolMessage = require("./tools/messageTools"); // database info const DB = require('./db'); // fcm info const FCM_HELPER = require('./fcm'); // main variables let users = {}; let conversations = []; class Socket { constructor(socket) { this.io = socket; } socketEvents() { this.io.on('connection', (socket) => { // sender_id || user_type socket.sender_id = String(socket.handshake.headers.sender_id || socket.handshake.query.sender_id); socket.sender_type = String(socket.handshake.headers.sender_type || socket.handshake.query.sender_type); socket.sender_name = String(socket.handshake.headers.sender_name || socket.handshake.query.sender_name); socket.avatar = String(socket.handshake.headers.avatar || socket.handshake.query.avatar); const server = this.io; console.log("socket.sender_id",socket.sender_id,socket.sender_type,socket.sender_name, socket.avatar) // connect socket socket.on('connect', data => { console.log(" welcome new user ==>" + socket.id) }); // enter chat socket.on("enterChat", data => { console.log("enterChat ==>(room_id)", data); // let user = data.user_id + "_" + data.user_type; let user = socket.sender_id + "_" + socket.sender_type; // check if user is online or not if (!(user in users)) { users[user] = {}; } users[user][data.room_id] = socket; socket.user_id = user; socket.room_id = data.room_id.toString(); socket.join(socket.room_id); }); //send message socket.on("sendMessage", data => { console.log('sendMessage ==> receiver_id - receiver_type - type - body - duration - name ', data); // varaible var is_sender = 0, is_seen = 0; //----------- start append data --------------// data.sender_id = socket.sender_id; data.sender_type = socket.sender_type; data.room_id = socket.room_id; data.sender_name = socket.sender_name; data.avatar = socket.avatar; //----------- end append data --------------// // get objForInsert let objInsert = toolMessage.objInsertMessage(data); // insert the message for get message_id let message = helper.insertMessageAndUpdateRoom(objInsert); // create message relation for every room member let members = helper.findAllMemberInRoom(data.room_id); let receiver = data.receiver_id + "_" + data.receiver_type; // find for all member members.then(function(result) { if(result.length > 0) { result.forEach(member => { // insert into message_notification message.then(function(id) { is_sender = ((data.sender_id.toString() == member.memberable_id.toString()) && (toolMessage.getMorphRelation(data.sender_type) == member.memberable_type))?1:0; is_seen = (is_sender == 1) ? 1 : 0; helper.insertMessageNotifications( data, id, member, is_sender, is_seen); }) }) } }) message.then(function(id) { let resResciverMessage = toolMessage.resRecieveMessage(data,id); //users[receiver][data.room_id].emit("sendMessageRes", resResciverMessage); server.to(data.room_id).emit("sendMessageRes", resResciverMessage); }) if (! (receiver in users)) { // send fcm FCM_HELPER.send(toolMessage.objFcm(data)); } }) socket.on('updatelocation', data=>{ console.log("updatelocation",data); let tracker_id = ''; // save loactions helper.updateLocations(data); let userTrackers = helper.getDelegateOrder(socket.sender_id); // find for all member userTrackers.then(function(result) { if(result.length > 0) { result.forEach(member => { tracker_id = member.user_id; if(tracker_id in users){ if(socket.sender_id in users[tracker_id]){ users[tracker_id][socket.sender_id].emit("trackorder", data); } } }) } }) }); // addtracker socket.on("addtracker", data=>{ console.log('addtracker', data); if(!(socket.sender_id in users)){ users[socket.sender_id] = {}; } users[socket.sender_id][data.provider_id] = socket; socket.tracker = socket.sender_id; socket.provider_id = data.provider_id; }); // exit chat // exit chat socket.on('exitChat', () => { console.log("exitChat"); let socketExit = socket.sender_id + "_" + socket.sender_type; if (!(socketExit in users)) return; if (!(socket.room_id in users[socketExit])) return; delete users[socketExit][socket.room_id]; if (Object.keys(users[socketExit]).length === 0) { delete users[socketExit]; } }); // disconnect socket.on('disconnect', () => { console.log("disconnect"); let socketExit = socket.sender_id + "_" + socket.sender_type; if (!(socketExit in users)) return; if (!(socket.room_id in users[socketExit])) return; delete users[socketExit][socket.room_id]; if (Object.keys(users[socketExit]).length === 0) { delete users[socketExit]; } }); }); } // config connector data socketConfig() { console.log('you can start socket events'); this.socketEvents(); } } module.exports = Socket;
Back to File Manager