projeto-hit/backend/src/helpers/WhoIsOnlineMonitor.ts

237 lines
5.7 KiB
TypeScript
Raw Normal View History

2022-05-03 21:20:58 +00:00
import e from "express";
import { bool, number } from "yup";
import { getIO } from "../libs/socket";
import Queue from "../models/Queue";
import ListUserParamiterService from "../services/UserServices/ListUserParamiterService";
import createOrUpdateOnlineUserService from "../services/UserServices/CreateOrUpdateOnlineUserService";
import { splitDateTime } from "../helpers/SplitDateTime";
import format from 'date-fns/format';
import ptBR from 'date-fns/locale/pt-BR';
import ListUserOnlineOffline from "../services/UserServices/ListUsersOnlineOfflineService";
import { check } from "prettier";
import { addHours, addMinutes, addSeconds, intervalToDuration, add } from "date-fns";
import { date } from "faker";
import sumOnlineTimeNow from '../helpers/SumOlineTimeNow'
import UserOnlineTime from "../models/UserOnlineTime";
let whoIsOnline_monitor: any;
// const listUserId:any[] = [{'id':8, status: 'offline'},{'id':3, status: 'offline'},{'id':5, status: 'offline'}]
let listUserId: any[] = []
let count = 0
let countTest = 0
let uuid: any = 0
let dateTime = splitDateTime(new Date(format(new Date(), 'yyyy-MM-dd HH:mm:ss', { locale: ptBR })))
let timeInterval = 5
let lstOnline: any = []
let deleted: boolean = false;
const setOfflineAllUsers = async () => {
// const onlineUsers = await ListUserOnlineOffline({ date: dateTime.fullDate, status: 'online' })
// console.log('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX onlineUsers: ', onlineUsers)
// if (onlineUsers.length > 0) {
// onlineUsers.forEach(async user => {
// await createOrUpdateOnlineUserService({ userId: user.userId, status: 'offline' })
// });
// }
}
const emitterOnline = (user: any, status: string, showOnlineTime: boolean = true) => {
if (!user.id) return
let newOnlinetime = sumOnlineTimeNow(user)
let onlineTime: any = {
userId: user.id,
status: status,
onlineTime: newOnlinetime,
}
if (!showOnlineTime) {
onlineTime = {
userId: user.id,
status: status
}
}
2022-05-03 21:20:58 +00:00
const io = getIO();
io.emit("onlineStatus", {
action: "update",
userOnlineTime: onlineTime
});
}
const monitor = async () => {
const test = require('./../libs/socket');
if (test.ob) {
if (count > 1) {
count = 0
}
if (count == 0) {
uuid = test.ob.uuid
}
if (count == 1) {
if (uuid) {
if (uuid == test.ob.uuid) {
console.log('ALL USERS CLIENTS OFFLINE 1...........')
//await setOfflineAllUsers()
test.ob.listOnline = []
test.ob.listOnlineAux = []
test.ob.uuid = undefined
}
}
} else {
2022-05-16 03:33:09 +00:00
// console.log(' * TEST OBJ', test.ob)
test.ob.listOnline.forEach(async (el: any) => {
const indexAux = lstOnline.findIndex((e: any) => e.id == el.id)
if (indexAux == -1) {
console.log(' entrou indexAux: ', indexAux)
const userOnline = await createOrUpdateOnlineUserService({ userId: el.id, status: 'online' })
if (userOnline) {
el.onlineTime = userOnline.onlineTime
el.updatedAt = userOnline.updatedAt,
console.log(' * CREATED OR UPDATED USER TO ONLINE: ', userOnline.userId)
lstOnline.push({ 'id': el.id, 'status': 'online' })
}
}
if (el.status == 'waiting...') {
emitterOnline(el, el.status, false)
}
else {
emitterOnline(el, el.status)
}
});
2022-05-16 03:33:09 +00:00
// console.log('----------- 1 lstOnline: ', lstOnline)
let difference = lstOnline.filter((x: any) => !test.ob.listOnline.map((e: any) => e.id).includes(x.id));
2022-05-16 03:33:09 +00:00
// console.log(' * diference: ', difference)
difference.forEach(async (e: any) => {
const index = lstOnline.findIndex((x: any) => x.id == e.id)
if (index != -1) {
lstOnline.splice(index, 1)
2022-05-16 03:33:09 +00:00
// console.log('----------- 2 lstOnline: ', lstOnline)
const userOnline = await createOrUpdateOnlineUserService({ userId: e.id, status: 'offline' })
if (userOnline) {
2022-05-16 03:33:09 +00:00
// console.log(' * UPDATED USER TO OFFLINE: ', userOnline.userId)
}
}
})
}
count++
}
if (countTest > 5) {
countTest = 0
}
if (countTest == 0) {
try {
console.log(' Carregando usuárion no listUserId...')
listUserId = await ListUserParamiterService({ profile: 'user' })
} catch (error) {
console.log('There was an erro on ListUserParamiterService: ', error)
return
}
}
countTest = 1
listUserId.forEach((u) => {
// console.log(' *** listUserId: ', listUserId)
const io = getIO();
io.emit("isOnline", { action: "online", userId: u.id });
});
2022-05-16 03:33:09 +00:00
// console.log('***************** TIME INTERVAL: ', timeInterval)
2022-05-03 21:20:58 +00:00
};
export const startWhoIsOnlineMonitor = async (mileseconds?: number) => {
listUserId = []
count = 0
countTest = 0
uuid = 0
if (mileseconds) {
timeInterval = mileseconds
}
2022-05-03 21:20:58 +00:00
whoIsOnline_monitor = setInterval(monitor, timeInterval)
2022-05-03 21:20:58 +00:00
}
export const stopWhoIsOnlineMonitor = async () => {
2022-05-03 21:20:58 +00:00
clearInterval(whoIsOnline_monitor)
}