Edit File: events.js
const helper = require('./helper'), { addressMedia, timeZone } = require("./constVariables"), toolMessage = require("./tools/messageTools"), DB = require('./db'), FCM_HELPER = require('./fcm'), FCM_HELPER_Apn = require('./fcmApn'), OpenTok = require('opentok'), {apiKey,apiSecret,appId} = require("./constVariables"); // main variables let users = {}, conversations = [], sessionsCalls = [], videosCall = []; module.exports = { enterChat : (io,socket,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 = String(data.room_id || ""); socket.join(socket.room_id); }, sendMessage : async (io,socket,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); io.to(data.room_id).emit("sendMessageRes", resResciverMessage); }) if (! (receiver in users)) { // send fcm FCM_HELPER.send(toolMessage.objFcm(data)); } }, updatelocation : (io,socket,data)=>{ data.sender_id = socket.sender_id; //let tracker_id = ''; // save loactions helper.updateLocations(data); socket.broadcast.emit('moveMarker',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 : (io,socket,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; }, call : (io,socket,data)=>{ let time = new Date(); var config = {},i18n = ""; let devices = [],bodyNotify = ""; if(data.status == "start"){ let day = time.getDate(); let month = time.getMonth()+1; let year = time.getFullYear(); let date = day+"/"+month+"/"+year; data.month = month; data.day = day; data.year = year; data.timeAdd = new Date(); // start call if(! videosCall.includes(data.room_id.toString())){ videosCall.push(data.room_id.toString()); } socket.join(String(data.room_id)); socket.videoCallId = data.room_id.toString(); helper.update(socket.sender_id, socket.sender_type.toLocaleLowerCase()+"s", {'is_busy': 1}); helper.update(data.receiver_id, data.receiver_type.toLocaleLowerCase()+"s", {'is_busy': 1}); FCM_HELPER_Apn.send(data,"newCall"); } else if(data.status == "answer"){ data.answer_second = true; socket.join(String(data.room_id)); socket.videoCallId = data.room_id.toString(); // record video call helper.update(data.receiver_id, data.receiver_type.toLocaleLowerCase()+"s", {'is_busy': 1}); } else{ //data.answer_second = answer_second; if(data.answer_second == false){ FCM_HELPER_Apn.send(data,'missedCall'); } helper.update(socket.sender_id, socket.sender_type.toLocaleLowerCase()+"s", {'is_busy': 0}); helper.update(data.receiver_id, data.receiver_type.toLocaleLowerCase()+"s", {'is_busy': 0}); if(data.order_call_type == "order"){ helper.update(data.order_id, "orders", {'secret_key': null,'token':null,'session_id':null,'api_key':null}); }else{ helper.update(data.order_id, "negotiation_orders", {'secret_key': null,'token':null,'session_id':null,'api_key':null}); } module.exports.exitVideoCall(io, socket, {videoCallId: String(data.room_id)}) } }, exitSessionCall : (id) =>{ console.log("exitSessionCall") try{ answer_second = false; videosCall = videosCall.filter(v => v.id !== id); } catch(error){ console.log('error', error); } }, exitVideoCall : (io,socket, data) =>{ console.log("exitVideoCall",data) answer_second = false; // socket.leave(); //console.log("aaaaa"); io.to(data.videoCallId).emit('callFinished', { finish: true }); }, exitChat : (io,socket)=>{ 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]; } }, exit : (io,socket) => { console.log("exit") try{ answer_second = false; module.exports.exitVideoCall(io, socket, {videoCallId: socket.videoCallId}) return module.exports.exitSessionCall(socket.videoCallId); } catch(error){ console.log('error', error); } }, disconnect : (io,socket)=>{ try{ 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]; } return module.exports.exit(io, socket); } catch(error){ console.log('error', error); } } }
Back to File Manager