"use strict"; const messageModel = require("../../model/messageModel"); const refreshChat = require("../../util/refreshChat"); const sendQueueMessage = require("../../util/sendQueueMessage"); const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); /** * Cron config that gives you an opportunity * to run scheduled jobs. * * The cron format consists of: * [SECOND (optional)] [MINUTE] [HOUR] [DAY OF MONTH] [MONTH OF YEAR] [DAY OF WEEK] * * See more details here: https://strapi.io/documentation/developer-docs/latest/concepts/configurations.html#cron-tasks */ let clients = {}; let taskClientLoading = false; let taskSendingMessage = false; module.exports = { "*/10 * * * * *": async () => { if (!taskClientLoading) { // console.log("refresh cients"); const session_key = await strapi.api["session-data"].services[ "session-data" ].find({ _sort: "phonenumber:desc", }); if (session_key.length == 0) taskClientLoading = false; else { for (const i of session_key) { if (!Object.keys(clients).includes(`${i["id"]}`)) { taskClientLoading = true; clients[i["id"]] = null; var data = await messageModel .asyncLoadClient(i) .catch((message) => { console.log(`error loading clients ${message}`); }); if (data["TYPE"] == "READY") { clients[i["id"]] = data["DATA"]; } else if (data["TYPE"] == "AUTH_FAILURE") { let id = i["id"]; await strapi.api["session-data"].services[ "session-data" ].delete({ id }); // const messages = await strapi.api.message.services.message.find( // { // _sort: "session_datum_key:desc", // state: "QUEUE", // session_datum_key: i["id"], // } // ); // for (const message of messages) { // await strapi.api.message.services.message.update( // { id: message.id }, // { // state: "ERROR", // keterangan: "sessions no longer valid", // } // ); // } } } } taskClientLoading = false; } } }, "*/3 * * * * *": async () => { if (!taskSendingMessage && Object.keys(clients).length != 0) { // console.log("auto send"); taskSendingMessage = true; if (Object.keys(clients).length == 0) taskSendingMessage = false; else { for (const i of Object.keys(clients)) { var sessionsValid = await strapi.api[ "session-data" ].services["session-data"].sessionCheck(parseInt(i)); if (!sessionsValid) { delete clients[parseInt(i)]; } else { await sendQueueMessage(clients[i], parseInt(i)); await refreshChat(clients[i], parseInt(i)); } } taskSendingMessage = false; } } }, };