checkVersion.cpp 3.1 KB

#include <time.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <IOSTREAM> 
#include <windows.h>
#include <thread>
using namespace std;

HINSTANCE hDLL1;
char* pPathTempJson;
char* pPathVlibrasJson;
int codDownload = -1;
		
//Assinatura do método itd_downloadfile utilizado na dll 
typedef int (WINAPI*download)(char * arg1, char * arg2);
download itd_downloadfile;
	
ofstream versionFileCheck;

 

//usado para representar as versoes tanto da api quanto local
typedef struct Versions
{
   char versionDicionario[7]={'0','0','0','0','0','0','\0'};
   char versionPlayer[4]={'0','0','0','\0'}; 
} Version; 

// usado para carregar os jsons de versoes
Version loadVersion(char* pPathTempJson)
{	
	Version version;
	string line_in_str;
    ifstream file_versionApi;
	
   int i;
   try
   {  
        file_versionApi.open(pPathTempJson);
		while ( getline (file_versionApi, line_in_str) )
		{		
			if(strstr(line_in_str.c_str(), "playerVersion")){
				i = 0;
				for (char & c : line_in_str)
				    if(isdigit(c)) 
						version.versionPlayer[i++]=c;			    		    
				version.versionPlayer[i]='\0';
			}
			else if(strstr(line_in_str.c_str(), "dictionaryVersion")){

				i = 0; 
				for (char & c : line_in_str)
				     if(isdigit(c))
				    	 version.versionDicionario[i++]=c; 
				version.versionDicionario[i]='\0';	
			}			
		}
		file_versionApi.close();
		}
    catch (exception e)
    {
       
    }    
	return version;
}

void downloadFileJson(){
	
	codDownload = itd_downloadfile("http://vlibras.lavid.ufpb.br/api/dicionario/0.0.0_0.0.0?type=json",pPathTempJson);
}



int main(){
	
	versionFileCheck.open ("c:\\VLibras\\update\\version\\version.txt");
	
	pPathTempJson ="C:\\VLibras\\update\\download\\VLibrasVersionApi.json";
	pPathVlibrasJson = "c:\\VLibras\\version.json";
	//Carrega a dll
	hDLL1 = LoadLibrary("c:\\VLibras\\update\\plugins\\itdownload.dll");
	//Relaciona método local com o método implementado na dll
	itd_downloadfile=(download)GetProcAddress((HMODULE)hDLL1, "itd_downloadfile");

	if (hDLL1){
		
			//faz download do json de versao
			thread tDownloadFileJson(downloadFileJson);
			
			clock_t time_end;
			time_end = clock() + 3000 * CLOCKS_PER_SEC/1000;
			while (clock() < time_end);
		
			if(codDownload == -1){
				versionFileCheck << "-1";
				goto erro;
			}
			tDownloadFileJson.join();
			
			//verifica se existe os dois arquivos de versao 
			if(!ifstream(pPathTempJson) || !ifstream(pPathVlibrasJson) || (codDownload > 0 )){
				
				versionFileCheck << "-1";
				goto erro;
			}

			Version versionApi = loadVersion(pPathTempJson);
			Version versionLocal = loadVersion(pPathVlibrasJson);
			
			// compara as versoes (return '0' para nao tem attualizacao, '1' para player e '2' para dicionario)
			if(atoi(versionApi.versionPlayer)> atoi(versionLocal.versionPlayer))
				versionFileCheck << "1";
			else if(atoi(versionApi.versionDicionario)> atoi(versionLocal.versionDicionario))
				versionFileCheck << "2";
			else
				versionFileCheck << "0";
		}
		else
			versionFileCheck << "-1";
			
			
			erro:
			
			
		versionFileCheck.close();
		
		//Libera dll
		FreeLibrary((HMODULE)hDLL1);
	return 1;

}