diff --git a/config/functions/cron.js b/config/functions/cron.js index 8f7c3d5..47b68ff 100644 --- a/config/functions/cron.js +++ b/config/functions/cron.js @@ -13,11 +13,19 @@ const { parseMultipartData, sanitizeEntity } = require("strapi-utils"); let clients = {}; let taskClientLoading = false; let taskSendingMessage = false; + +function loadClient(i) { + return new Promise((resolve) => { + messageModel.loadClient(i["session_data"], async (data) => { + return resolve(data); + }); + }); +} + module.exports = { "*/10 * * * * *": async () => { if (!taskClientLoading) { - console.log("refresh cients"); - taskClientLoading = true; + // console.log("refresh cients"); const session_key = await strapi.api["session-data"].services[ "session-data" ].find({ @@ -25,57 +33,39 @@ module.exports = { }); if (session_key.length == 0) taskClientLoading = false; else { - session_key.forEach(async (i, indx) => { + for (const i of session_key) { if (!Object.keys(clients).includes(`${i["id"]}`)) { + taskClientLoading = true; clients[i["id"]] = null; - await messageModel.loadClient( - i["session_data"], - async (data) => { - if ( - data["STATUS"] == 1 && - data["TYPE"] == "READY" - ) { - if (indx + 1 == session_key.length) - taskClientLoading = false; - clients[i["id"]] = data["DATA"]; - return; - } else if ( - data["STATUS"] == 0 && - data["AUTH_FAILURE"] - ) { - let id = i["id"]; - await strapi.api["session-data"].services[ - "session-data" - ].delete({ id }); - if (indx + 1 == session_key.length) - taskClientLoading = false; - return; - } else if (data["STATUS"] == 0) { - if (indx + 1 == session_key.length) - taskClientLoading = false; - return; - } - } - ); + var data = await loadClient(i); + 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 }); + } } - }); + } + taskClientLoading = false; } } }, "*/3 * * * * *": async () => { - if (!taskSendingMessage) { - console.log("auto send", clients); + if (!taskSendingMessage && Object.keys(clients).length != 0) { + // console.log("auto send"); taskSendingMessage = true; if (Object.keys(clients).length == 0) taskSendingMessage = false; else { - Object.keys(clients).forEach(async (i, indx) => { + for (const i of Object.keys(clients)) { const sessions = await strapi.api["session-data"].services[ "session-data" ].getId({ _sort: "phonenumber:desc", }); - if (!sessions.includes(i)) { - delete clients[i]; + if (!sessions.includes(parseInt(i))) { + delete clients[parseInt(i)]; } else { const messages = await strapi.api.message.services.message.find( { @@ -84,36 +74,41 @@ module.exports = { session_datum_key: i, } ); - messages.forEach(async (message) => { - console.log(clients[i] != null, i, clients); - 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"] - ); - if (send["STATUS"] == 1) { + 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: "SENT" } + { state: "SENDING" } ); - } else { - await strapi.api.message.services.message.update( - { id: message.id }, - { state: "ERROR" } + let send = await messageModel.sendMessage( + clients[i], + message["send_to"], + message["raw_text"] ); + 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" } + ); + } } - } else taskSendingMessage = false; - }); + } catch (e) { + await strapi.api.message.services.message.update( + { id: message.id }, + { state: "ERROR" } + ); + } + } } - - if (indx + 1 == Object.keys(clients).length) - taskSendingMessage = false; - }); + } + taskSendingMessage = false; } } }, diff --git a/model/messageModel.js b/model/messageModel.js index 2721d01..6bf3652 100644 --- a/model/messageModel.js +++ b/model/messageModel.js @@ -23,13 +23,15 @@ function callbacks(client, callback, type = "create") { }); }); client.on("disconnected", async function (session) { - console.log("disconnected from loading"); + console.log("disconnected from ", type, session); if (session == "UNPAIRED") { try { if (type == "load" && client && client.info) { + console.log(getID); getID = await strapi .query("session-data") .findOne({ phonenumber: client.info.wid.user }); + console.log(getID); if (getID) { let id = getID["id"]; await strapi.api["session-data"].services[