//+------------------------------------------------------------------+ //| 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 //--- 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 //+------------------------------------------------------------------+