Edit File: events.js
const helper = require('./helper'), toolMessage = require("./tools/messageTools"), DB = require('./db'), FCM_HELPER = require('./fcm'), FCM_HELPER_Apn = require('./fcmApn'), OpenTok = require('opentok'), {addressMedia,timeZone,apiKey,apiSecret,appId} = require("./constVariables"); // main variables let users = {}, conversations = [], sessionsCalls = [], videosCall = []; // opentok // (async ()=>{ // openTok = new OpenTok(apiKey, apiSecret); // })(); module.exports = { // enter chat enterChat : (io,socket,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); }, // sendMessage 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 = await helper.insertMessageAndUpdateRoom(objInsert) // create message relation for every room member let receiver = data.receiver_id + "_" + data.receiver_type; let resResciverMessage = toolMessage.resRecieveMessage(data,message); io.to(data.room_id).emit("sendMessageRes", resResciverMessage); if (! (receiver in users)) { // send fcm FCM_HELPER.send(toolMessage.objFcm(data)); } }, // call 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.order_id.toString())){ videosCall.push(data.order_id.toString()); } socket.join(String(data.order_id)); socket.videoCallId = data.order_id.toString(); helper.update(data.order_id, "orders", {'status': '"inprogress"'}); helper.update(data.sender_id, "users", {'is_busy': 1}); helper.update(data.receiver_id, "users", {'is_busy': 1}); FCM_HELPER_Apn.send(data,"newCall"); } else if(data.status == "answer"){ data.answer_second = true; socket.join(String(data.order_id)); socket.videoCallId = data.order_id.toString(); helper.update(data.order_id, "orders", {'has_calling': 1,"start_call":`"${toolMessage.getTimeMessage()}"`}); } else{ //data.answer_second = answer_second; if(data.answer_second == false){ FCM_HELPER_Apn.send(data,'missedCall'); } // socket.emit('callFinished', { finish: true }); io.to(String(data.order_id)).emit('callFinished', { finish: true }); helper.update(data.sender_id, "users", {'is_busy': 0}); helper.update(data.receiver_id, "users", {'is_busy': 0}); // helper.update(data.order_id, 'orders', {'status':'finished'}); module.exports.exitVideoCall(io, socket, {videoCallId: socket.videoCallId}) } }, // exitSessionCall 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") answer_second = false; socket.leave(); return io.to(String(data.videoCallId)).emit('callFinished', { finish: true }); }, // updatelocation updatelocation : (io,socket,data)=>{ let tracker_id = ''; data.provider_id = socket.sender_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 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; }, 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); } }, //exitChat 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]; } }, //disconnect 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