Olivia_v2017/OliviaTasks/OliviaTasks.cpp

173 lines
3.5 KiB
C++

// OliviaTasks.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "OliviaTasks.h"
#include "olv_task.h"
#include "OlvTaskProcess.h"
#include "utl.h"
#include "olv_dll.h"
#include "olv.h"
#include "_log.h"
#include "Msmain.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#include "GeometryFunction.h"
#include "StrArray.h"
#include "ClienteLicencias.h"
#include "_app.h"
// The one and only application object
//! Clase principal de OliviaTasks
/*!
* Es la interface entre el AddIn de Olivia y el core de calculos Olivia.dll
*
*/
CWinApp theApp;
using namespace std;
BOOL coge_param(char *cmdline, OlvTaskProcess *task);
//! Funcion principal
/**
* Funcion principal que inicia la aplicacion al ser llamada por el AddIn
*/
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
int nRetCode = 0;
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
nRetCode = 1;
}
else
{
OlvApp.olv = new COlivia();
Msmain mp;
OlvApp.olv->mfrm = ∓
mp.olv = OlvApp.olv;
//inicia log-------------------------------------------------
C_app* app = C_app::GetApp();
app->archi.rellena_dirs_ejecucion();
#ifdef _DEBUG
HWND Stealth;
AllocConsole();
Stealth = FindWindowA("ConsoleWindowClass", NULL);
ShowWindow(Stealth,SW_SHOWNORMAL);
#endif
#ifdef _DEBUG
system("pause");
#endif
//pilla path temporal
StrArray buf;
strcpy(app->log.nombre,"Olivia");
int nn = Cutl::stringSplit(lpCmdLine,"/path_temp:", &buf)->n_i;
if(nn>=2 && Cutl::stringSplit(buf.get(1)," /", &buf)->n_i>nn)
strcpy(app->log.path,buf.get(nn));
buf.borra();
//verifica versión-----------------------------------
ClienteLicencias lic;
char strtem[MAX_PATH];
app->archi.rellena_dirs_ejecucion();
strcpy_s(strtem,MAX_PATH,app->archi.path_ejecutable);
Cdir_manager::dir_anterior(strtem);
sprintf(lic.dirLic,"%s\\", strtem);
sprintf(lic.dirTemp,"%s\\", app->log.path);
if(!lic.cargaLicencia())
{
C_log::log("_tmain", "Error al comprobar versión");
#ifdef _DEBUG
system("pause");
#endif
}
C_log::log("_tmain","Inicio OliviaTask: %s", lpCmdLine);
mp.Despacha_log();
//verifica modo debug----------------------------------------
if(strstr(lpCmdLine,"debug"))
{
OlvApp.olv->modo_ejec=OLV_EJEC_DEBUG_SIGUE;
}
char err[1024];
if(!OlvApp.olv->inicia(lpCmdLine, err,1024))
{
C_log::log("_tmain",err);
}
else
{
if(OlvApp.olv->isDebug)
{
#ifdef _DEBUG
system("pause");
#endif;
OlvApp.olv->prueba();
}
mp.Despacha();
}
C_log::log("_tmain","Final feliz!!");
mp.Despacha_log();
OlvApp.olv->mfrm =NULL;
#ifdef _DEBUG
system("pause");
#endif
}
return nRetCode;
}
//*************************************************************************************
/**
* Dada la línea de comandos, la divide en los parámetros necesarios
* (Funcion para modo multitask)
*/
BOOL coge_param(char *cmdline, OlvTaskProcess *task)
{
char *token;
int j;
//los parámetros son:
//\olivia \tipo_oliv \cfg.ini \ip \puerto \toutsock
token = strtok(cmdline, TASKS_PARAM_SEP);
//Lee parámetros
j=0;
while (token != NULL)
{
if(j==0)
{
//ip
strcpy_s(OlvApp.ip,64,token);
}
else if(j==1)
{
//puerto
OlvApp.port=atoi(token);
}
else if(j==2)
{
//ithr
task->ithr = atoi(token);
}
token = strtok(NULL, TASKS_PARAM_SEP);
j++;
}
if(j<3)
return FALSE; //no ha leído los param suficientes
return TRUE;
}