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 } } 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 { // 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) } }); // console.log('----------- 1 lstOnline: ', lstOnline) let difference = lstOnline.filter((x: any) => !test.ob.listOnline.map((e: any) => e.id).includes(x.id)); // 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) // console.log('----------- 2 lstOnline: ', lstOnline) const userOnline = await createOrUpdateOnlineUserService({ userId: e.id, status: 'offline' }) if (userOnline) { // 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 }); }); // console.log('***************** TIME INTERVAL: ', timeInterval) }; export const startWhoIsOnlineMonitor = async (mileseconds?: number) => { listUserId = [] count = 0 countTest = 0 uuid = 0 if (mileseconds) { timeInterval = mileseconds } whoIsOnline_monitor = setInterval(monitor, timeInterval) } export const stopWhoIsOnlineMonitor = async () => { clearInterval(whoIsOnline_monitor) }