2026-03-18 08:46:51 -05:00
//+------------------------------------------------------------------+
2026-03-17 16:38:37 -05:00
//| 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
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-03-18 08:46:51 -05:00
//--- Clase base
2026-03-17 16:38:37 -05:00
# include <TSN\\LLM\\TlgSender.mqh>
2026-03-18 08:46:51 -05:00
2026-03-18 12:10:30 -05:00
//--- Defincion del protocolko de comunicacion
# include "Protocol\\Def.mqh"
//--- Backend | Frontend de la app (tab dgen)
2026-03-18 08:46:51 -05:00
# include "..\\..\\UI\\DataGenerationTab\\Base.mqh"
2026-03-17 16:38:37 -05:00
2026-03-17 16:50:48 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
# define EXPERT_TELEGRAM_PATH " Experts \\ Shared Projects \\ AiDataTaskRuner \\ Backend \\ Tlgm \\ TlgBot.ex5 "
2026-03-18 08:46:51 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CChatTelegramAgentLLmSenderAdtr : public CChatTelegramAgentLLmBase
{
private :
ITaskRunerAi * m_backend ;
CTaskRunerAiTabDGenMain * m_fronted ;
public :
CChatTelegramAgentLLmSenderAdtr ( void ) { }
~ CChatTelegramAgentLLmSenderAdtr ( void ) { }
//---
2026-03-18 12:55:47 -05:00
void Set ( ITaskRunerAi * backend , CTaskRunerAiTabDGenMain * fronted ) ;
2026-03-18 08:46:51 -05:00
void ChartEvent ( const int32_t id , const long & lparam , const double & dparam , const string & sparam ) ;
} ;
2026-03-18 12:55:47 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CChatTelegramAgentLLmSenderAdtr : : Set ( ITaskRunerAi * backend , CTaskRunerAiTabDGenMain * fronted )
{
m_backend = backend ;
m_fronted = fronted ;
}
2026-03-18 08:46:51 -05:00
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void CChatTelegramAgentLLmSenderAdtr : : ChartEvent ( const int id , const long & lparam , const double & dparam , const string & sparam )
{
2026-03-18 12:43:15 -05:00
//---
2026-03-18 08:46:51 -05:00
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
//---
2026-03-18 12:10:30 -05:00
static string id_tool , val ;
if ( ! TlgLlmProtocolDesempaquetar ( sparam , id_tool , val ) )
2026-03-18 08:46:51 -05:00
{
2026-03-18 13:28:52 -05:00
LogError ( " Formato invalido de empauqetacion de telegram (val recibido de tlgm) " , FUNCION_ACTUAL ) ;
2026-03-18 08:46:51 -05:00
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 )
{
2026-03-18 12:10:30 -05:00
: : 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 " ) ) ;
2026-03-18 08:46:51 -05:00
return ;
}
static TaskTester task ;
task . Assing ( arr ) ;
2026-03-18 12:10:30 -05:00
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 ,
2026-03-18 12:43:15 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , ( ok ? " Task added successfully " : m_backend . m_last_error_msg ) ) ) ;
2026-03-18 08:46:51 -05:00
//---
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 \n se 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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , " Invalid format, use | for separate bool parameter and file name " ) ) ;
2026-03-18 08:46:51 -05:00
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , str ) ) ;
2026-03-18 08:46:51 -05:00
return ;
}
else
{
: : EventChartCustom ( m_bot_chart_id , CHATELGRAM_E_ON_CHANGE_PARAM , TLGM_RECIBER_PARAM_TOOL_SAVE_TASK_IN_FILE , m_key ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , StringFormat ( " Successfully saving all tasks to file %s, in %s base folder " , arr [ 1 ] ) ) ) ;
2026-03-18 08:46:51 -05:00
}
//---
break ;
}
2026-03-17 16:50:48 -05:00
2026-03-17 16:38:37 -05:00
2026-03-18 08:46:51 -05:00
//---
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , str ) ) ;
2026-03-18 08:46:51 -05:00
}
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , string ( m_backend . TaskSize ( ) ) ) ) ;
2026-03-18 08:46:51 -05:00
//---
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 ,
2026-03-18 12:10:30 -05:00
m_key , TlgLlmProtocolEmpaquetar ( id_tool , StringFormat ( " Invalid index acces = %d " , index ) ) ) ;
2026-03-18 08:46:51 -05:00
}
//---
: : EventChartCustom ( m_bot_chart_id , CHATELGRAM_E_ON_CHANGE_PARAM , TLGM_RECIBER_PARAM_TOOL_GET_TASK_BY_INDEX , m_key ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , string ( m_backend . GetTaskByIndex ( index ) . ToStringFile ( ) ) ) ) ;
2026-03-18 08:46:51 -05:00
//---
break ;
}
//---
case 5 : // TLGM_RECIBER_PARAM_TOOL_CLEAN_ALL_TASK_OF_TABLE
{
2026-03-18 12:10:30 -05:00
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 ,
2026-03-18 12:43:15 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , ok ? " All tasks cleaned " : " No tasks to clean " ) ) ;
2026-03-18 08:46:51 -05:00
break ;
}
//---
case 6 : // TLGM_RECIBER_PARAM_TOOL_EXECUTE_ALL_TASK_OF_TABLE
{
2026-03-18 12:10:30 -05:00
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 ,
2026-03-18 12:43:15 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , ok ? " All tasks queued for execution " : " No pending tasks " ) ) ;
2026-03-18 08:46:51 -05:00
break ;
}
//---
case 7 : // TLGM_RECIBER_PARAM_TOOL_LOAD_CONFIG_IN_FILE
{
val = AIDATATASKRUNER_PATH_TASK + val ;
2026-03-18 12:10:30 -05:00
const bool ok = m_backend . LoadConfig ( val ) ;
if ( ok )
2026-03-18 08:46:51 -05:00
m_fronted . SincronizeFrontendOfBackend ( TASKRUNERAIDGENMAIN_FLAG_CONFIG ) ;
2026-03-18 12:10:30 -05:00
: : 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 ) ) ) ;
2026-03-18 08:46:51 -05:00
break ;
}
//---
case 8 : // TLGM_RECIBER_PARAM_TOOL_SAVE_CONFIG_IN_FILE
{
val = AIDATATASKRUNER_PATH_TASK + val ;
2026-03-18 12:10:30 -05:00
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 ) ) ) ;
2026-03-18 08:46:51 -05:00
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , AIDATATASKRUNER_BASE_FOLDER ) ) ;
2026-03-18 08:46:51 -05:00
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , AIDATATASKRUNER_PATH_TASK ) ) ;
2026-03-18 08:46:51 -05:00
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 ,
2026-03-18 12:10:30 -05:00
TlgLlmProtocolEmpaquetar ( id_tool , g_aidatatask_runner_config_g . comon_flag ? " 1 " : " 0 " ) ) ;
2026-03-18 08:46:51 -05:00
break ;
}
//---
default :
break ;
}
}
}
# endif // AIDATATASKRUNNER_BACKEND_TLGM_SENDER_MQH
//+------------------------------------------------------------------+