AiDataTaskRuner/Backend/Tlgm/Sender.mqh
Nique_372 8c19e943fe
2026-03-18 13:28:52 -05:00

268 lines
10 KiB
MQL5

//+------------------------------------------------------------------+
//| Sender.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Niquel Mendoza."
#property link "https://www.mql5.com/es/users/nique_372"
#property strict
#ifndef AIDATATASKRUNNER_BACKEND_TLGM_SENDER_MQH
#define AIDATATASKRUNNER_BACKEND_TLGM_SENDER_MQH
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
//--- Clase base
#include <TSN\\LLM\\TlgSender.mqh>
//--- Defincion del protocolko de comunicacion
#include "Protocol\\Def.mqh"
//--- Backend | Frontend de la app (tab dgen)
#include "..\\..\\UI\\DataGenerationTab\\Base.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
#define EXPERT_TELEGRAM_PATH "Experts\\Shared Projects\\AiDataTaskRuner\\Backend\\Tlgm\\TlgBot.ex5"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CChatTelegramAgentLLmSenderAdtr : public CChatTelegramAgentLLmBase
{
private:
ITaskRunerAi* m_backend;
CTaskRunerAiTabDGenMain* m_fronted;
public:
CChatTelegramAgentLLmSenderAdtr(void) {}
~CChatTelegramAgentLLmSenderAdtr(void) {}
//---
void Set(ITaskRunerAi* backend, CTaskRunerAiTabDGenMain* fronted);
void ChartEvent(const int32_t id, const long& lparam, const double& dparam, const string& sparam);
};
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CChatTelegramAgentLLmSenderAdtr::Set(ITaskRunerAi* backend, CTaskRunerAiTabDGenMain* fronted)
{
m_backend = backend;
m_fronted = fronted;
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CChatTelegramAgentLLmSenderAdtr::ChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
//---
if(id == CHARTEVENT_CUSTOM + CHATELGRAM_E_ON_CHANGE_PARAM && fabs(dparam - m_key) < 0.10)
{
int8_t event_id = int8_t(lparam - TLG_RECIBER_BASE_MAX_LPARAM);
if(event_id <= 0) // el evento no nos interesa (es para tab base aunque no envia igual comprobamos)
return;
event_id -= 1; // para que sea 0
//---
static string id_tool, val;
if(!TlgLlmProtocolDesempaquetar(sparam, id_tool, val))
{
LogError("Formato invalido de empauqetacion de telegram (val recibido de tlgm)", FUNCION_ACTUAL);
return;
}
//---
switch(event_id)
{
case 0: // TLGM_RECIBER_PARAM_TOOL_ADD_TASK_TO_TABLE
{
//---
static string arr[TASKTESTER_VALUES];
if(StringSplit(val, '|', arr) != TASKTESTER_VALUES)
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_ADD_TASK_TO_TABLE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, "Invalid format"));
return;
}
static TaskTester task;
task.Assing(arr);
const bool ok = m_backend.AddDirectTask(task);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_ADD_TASK_TO_TABLE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, (ok ? "Task added successfully" : m_backend.m_last_error_msg)));
//---
break;
}
//---
case 1: // TLGM_RECIBER_PARAM_TOOL_SAVE_TASK_IN_FILE
{
//---
static string arr[2];
if(StringSplit(val, '|', arr) != 2)
{
LogError("Fallo al parsear val, para añadir nueva tarea, formato invalido\nse debe de separar con | y en los valores no tener el carcter |", FUNCION_ACTUAL);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_SAVE_TASK_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, "Invalid format, use | for separate bool parameter and file name"));
return;
}
//---
arr[1] = AIDATATASKRUNER_PATH_TASK + arr[1];
if(!m_backend.SaveAllTaskInFile(arr[1], bool(int(arr[0])))) // Añadimos internamente
{
const string str = StringFormat("Failed to save tasks to file = %s, last error:\n%s", val, m_backend.m_last_error_msg);
LogError(str, FUNCION_ACTUAL);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_SAVE_TASK_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, str));
return;
}
else
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_SAVE_TASK_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, StringFormat("Successfully saving all tasks to file %s, in %s base folder", arr[1])));
}
//---
break;
}
//---
case 2: // TLGM_RECIBER_PARAM_TOOL_LOAD_TASK_IN_FILE
{
//---
val = AIDATATASKRUNER_PATH_TASK + val;
if(!m_backend.SetTastByFile(val)) // Añadimos internamente
{
const string str = StringFormat("Failed to load tasks from file = %s", val);
LogError(str, FUNCION_ACTUAL);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_LOAD_TASK_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, str));
}
else
{
m_fronted.SincronizeFrontendOfBackend(TASKRUNERAIDGENMAIN_FLAG_TABLE); // sincronizamos la tabla con los elementos del backend
}
//---
break;
}
//---
case 3: // TLGM_RECIBER_PARAM_TOOL_TASK_TOTAL
{
//---
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_TASK_TOTAL, m_key,
TlgLlmProtocolEmpaquetar(id_tool, string(m_backend.TaskSize())));
//---
break;
}
//---
case 4: // TLGM_RECIBER_PARAM_TOOL_GET_TASK_BY_INDEX
{
//---
const int index = int(val);
if(index < 0 || index >= m_backend.TaskSize())
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_GET_TASK_BY_INDEX,
m_key, TlgLlmProtocolEmpaquetar(id_tool, StringFormat("Invalid index acces = %d ", index)));
}
//---
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_GET_TASK_BY_INDEX, m_key,
TlgLlmProtocolEmpaquetar(id_tool, string(m_backend.GetTaskByIndex(index).ToStringFile())));
//---
break;
}
//---
case 5: // TLGM_RECIBER_PARAM_TOOL_CLEAN_ALL_TASK_OF_TABLE
{
const bool ok = m_fronted.CleanAllTask();
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM,
TLGM_RECIBER_PARAM_TOOL_CLEAN_ALL_TASK_OF_TABLE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, ok ? "All tasks cleaned" : "No tasks to clean"));
break;
}
//---
case 6: // TLGM_RECIBER_PARAM_TOOL_EXECUTE_ALL_TASK_OF_TABLE
{
const bool ok = m_fronted.RunAllTask();
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM,
TLGM_RECIBER_PARAM_TOOL_EXECUTE_ALL_TASK_OF_TABLE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, ok ? "All tasks queued for execution" : "No pending tasks"));
break;
}
//---
case 7: // TLGM_RECIBER_PARAM_TOOL_LOAD_CONFIG_IN_FILE
{
val = AIDATATASKRUNER_PATH_TASK + val;
const bool ok = m_backend.LoadConfig(val);
if(ok)
m_fronted.SincronizeFrontendOfBackend(TASKRUNERAIDGENMAIN_FLAG_CONFIG);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_LOAD_CONFIG_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, ok ? "Config loaded successfully" : StringFormat("Failed: %s", m_backend.m_last_error_msg)));
break;
}
//---
case 8: // TLGM_RECIBER_PARAM_TOOL_SAVE_CONFIG_IN_FILE
{
val = AIDATATASKRUNER_PATH_TASK + val;
const bool ok = m_backend.SaveConfig(val);
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_SAVE_CONFIG_IN_FILE, m_key,
TlgLlmProtocolEmpaquetar(id_tool, ok ? "Config saved successfully" : StringFormat("Failed: %s", m_backend.m_last_error_msg)));
break;
}
//---
case 9: // TLGM_RECIBER_PARAM_TOOL_MAIN_FOLDER
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_MAIN_FOLDER, m_key,
TlgLlmProtocolEmpaquetar(id_tool, AIDATATASKRUNER_BASE_FOLDER));
break;
}
//---
case 10: // TLGM_RECIBER_PARAM_TOOL_TASK_FOLDER
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_MAIN_FOLDER, m_key,
TlgLlmProtocolEmpaquetar(id_tool, AIDATATASKRUNER_PATH_TASK));
break;
}
//---
case 11: // TLGM_RECIBER_PARAM_TOOL_IS_IN_COMMON_FOLDER
{
::EventChartCustom(m_bot_chart_id, CHATELGRAM_E_ON_CHANGE_PARAM, TLGM_RECIBER_PARAM_TOOL_IS_IN_COMMON_FOLDER, m_key,
TlgLlmProtocolEmpaquetar(id_tool, g_aidatatask_runner_config_g.comon_flag ? "1" : "0"));
break;
}
//---
default:
break;
}
}
}
#endif // AIDATATASKRUNNER_BACKEND_TLGM_SENDER_MQH
//+------------------------------------------------------------------+