#include "interf.h" #include /* Esta classe armazena dados oriundos das interfaces analizadas e os armazena assumindo que as medicoes serao realizadas com um intervalo de tempo igual a 5 minutos */ //------------------------------------------------------------------------------ cArquivoInterface::cArquivoInterface(){ InformarInterface(""); } //------------------------------------------------------------------------- void cArquivoInterface::InformarInterface(const string &ip){ Arquivo.Close(); MesAtual= -1; AnoAtual= -1; IpAtual = ip; } //------------------------------------------------------------------------------ cArquivoInterface::~cArquivoInterface(){ Arquivo.Close(); } //------------------------------------------------------------------------------ void cArquivoInterface::Abrir(int mes,int ano){ if(MesAtual != mes || AnoAtual != ano){ Arquivo.Close(); Arquivo.Open(RetNomeArquivo(IpAtual,mes,ano).c_str(), TFile::DenyNone | TFile::ReadWrite, TFile::PermRdWr); if( !Arquivo.IsOpen() ){ Arquivo.Open(RetNomeArquivo(IpAtual,mes,ano).c_str(), TFile::DenyNone | TFile::ReadWrite | TFile::Create, TFile::PermRdWr); // vamos limpar o arquivo.... sOcorrenciaDia *oc= new sOcorrenciaDia ; memset(oc,0,sizeof(sOcorrenciaDia)); for(int i=0; i < 31 ; i++) Arquivo.Write(oc,sizeof(sOcorrenciaDia)); delete oc; } } } //------------------------------------------------------------------------------ void cArquivoInterface::PosicionarRegistro(int dia,int mes, int ano,int hora,int minuto){ Abrir(mes,ano); long pos= long(sizeof(sOcorrenciaDia) * (dia -1L) + ((hora * 12L) + (minuto/5L)) * sizeof(sOcorrencia)); Arquivo.Seek(pos); } //------------------------------------------------------------------------------ void cArquivoInterface::InfDados(int dia,int mes,int ano,int hora,int minuto, sOcorrencia &ocorrencia){ PosicionarRegistro(dia,mes,ano,hora,minuto); Arquivo.Write(&ocorrencia,sizeof(ocorrencia)); } //------------------------------------------------------------------------------ void cArquivoInterface::RetDados(int dia,int mes,int ano,int hora,int minuto, sOcorrencia &ocorrencia){ PosicionarRegistro(dia,mes,ano,hora,minuto); if( Arquivo.Read(&ocorrencia,sizeof(ocorrencia)) != sizeof(ocorrencia)){ ocorrencia.Trafego= -1; ocorrencia.Erros = -1; ocorrencia.Flags = 0 ; } } //------------------------------------------------------------------------------ void cArquivoInterface::RetOcorrenciasDia(int dia, int mes, int ano, sOcorrenciaDia &ocorrenciasDia){ PosicionarRegistro(dia,mes,ano,0,0); // Posiciona no 1º subregistro // do registro do dia especificado memset(&ocorrenciasDia,0,sizeof(ocorrenciasDia)); Arquivo.Read(&ocorrenciasDia,sizeof(ocorrenciasDia)); } //------------------------------------------------------------------------------ // n0= 'A' + ip0 high (4 bits superiores) // n1= 'A' + ip0 low (4 bits inferiores) // n2= 'A' + ip1 high (4 bits superiores) // n3= 'A' + ip1 low (4 bits inferiores) // n4= 'A' + ip2 low (4 bits inferiores) // n5= 'A' + ip2 low (4 bits inferiores) // n6= 'A' + ip3 high (4 bits superiores) // n7= 'A' + ip3 low (4 bits inferiores) string cArquivoInterface::RetNomeArquivo(const string &ip,int mes,int ano){ string nomeArq; char *parou= (char*) ip.c_str(); unsigned char letra; for( int i=0; i < 4 ;i++){ letra= (unsigned char) strtol(parou,&parou,10); if(parou == NULL) break; parou++; nomeArq+= string( (char) ('A' + ((letra & 0xF0) >> 4)) ) + string( (char) ('A' + (letra & 0x0F)) ); } nomeArq+= string(".M") + string( (char) ('A' + (mes - 1) ) ) + string( (char) ('A' + (ano-1996) ) ); return nomeArq; } //------------------------------------------------------------------------- /* void leitura() { char ip[17]; int dia,mes,ano,hora,minuto; printf("\nDigite: ip dia mes ano hora minuto: "); scanf("%s %d %d %d %d %d",ip,&dia,&mes,&ano,&hora,&minuto); cArquivoInterface teste(ip); sOcorrencia resp; teste.RetDados(dia,mes,ano,hora,minuto,resp); printf("\nTrafego: %ld Erros: %ld Flags: %d\n", resp.Trafego, resp.Erros, resp.Flags); } void escrita() { char ip[17]; int dia,mes,ano,hora,minuto; printf("\nDigite: ip dia mes ano hora minuto: "); scanf("%s %d %d %d %d %d",ip,&dia,&mes,&ano,&hora,&minuto); cArquivoInterface teste(ip); printf("\nDigite: Trafego Erros Flags\n"); int temp; sOcorrencia resp; scanf("%ld %ld %d", &resp.Trafego, &resp.Erros, &temp); resp.Flags= temp; teste.InfDados(dia,mes,ano,hora,minuto,resp); } void main() { int opcao; do { printf("\n(1) Leitura (2) Escrita (3) fim: "); scanf("%d", &opcao); switch(opcao) { case 1 : leitura(); break; case 2 : escrita(); break; } } while(opcao != 3); } */ #if defined(__TESTE__) int main(int nArg, char *argumentos[]){ cArquivoInterface x; date data; getdate(&data); x.InformarInterface(argumentos[1]); if( nArg > 1 ){ int h,m; randomize(); for(h =0; h < 23 ; h++) for(m=0; m < 60; m+=5) x.InfDados(data.da_day, data.da_mon, data.da_year, h, m, sOcorrencia(random(1000),0,0)); } return 1; } #endif