"use strict"; const messageModel = require("../../model/messageModel"); const utils = require("../../util/util"); 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 { // const messages = await strapi.api.message.services.message.find( // { // _sort: "session_datum_key:desc", // state: "QUEUE", // session_datum_key: i, // } // ); // for (const message of messages) { // // console.log(clients[i] != null, i, clients); // try { // if (clients[i] != null) { // await strapi.api.message.services.message.update( // { id: message.id }, // { state: "SENDING" } // ); // let send = await messageModel.sendMessage( // clients[i], // message["send_to"], // message["raw_text"] // ); // // console.log(send); // if (send["STATUS"] == 1) { // await strapi.api.message.services.message.update( // { id: message.id }, // { state: "SENT" } // ); // } else { // await strapi.api.message.services.message.update( // { id: message.id }, // { // state: "ERROR", // keterangan: send["DATA"], // } // ); // } // } // } catch (e) { // await strapi.api.message.services.message.update( // { id: message.id }, // { state: "ERROR", keterangan: e.message } // ); // } // } await utils.refreshChat(clients[i], parseInt(i)); } } taskSendingMessage = false; } } }, };