Professional Documents
Culture Documents
#include
#include
#include
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<unistd.h>
<sys/socket.h>
<netdb.h>
<string.h>
<arpa/inet.h>
<signal.h>
#include "cJSON.h"
#define BUFFERSIZE 1200
#define ADDRSIZE 40
int continua;
void tratamensagem(char *mensagem);
int salvarLog(char *mensagem, char *filename);
void signal_handle(int signum);
int main(int argc, const char * argv[])
{
//
declarao da estrutura de dados
int
sd;
int
status;
struct sockaddr_in serveraddr;
unsigned short
serverport;
char
hostnamep[ADDRSIZE];
char
rx[BUFFERSIZE];
char
*tx;
//
//
//
//
//
//
chamada connect
status = connect(sd, (struct sockaddr *)&serveraddr, sizeof(serveraddr))
;
//
teste de conexo
if (status != 0)
{
perror("Erro na chamada connect");
exit(1);
}
//
//
//
teste de envio
if (status == -1)
{
perror("Erro na chamada write");
close(sd);
exit(1);
}
//
while (continua == 1)
{
limpar rx
memset(rx, 0, sizeof(rx));
//
chamda read()
status = read(sd, rx, sizeof(rx)-1);
printf("Info: %d bytes recebidos.\n", status);
//
teste de recebimento
if (status <= 0)
{
if (status <= -1)
{
perror("Erro na chamada read");
close(sd);
exit(1);
}
else
{
continua = 0;
}
}
else
{
if (status >= sizeof(rx))
{
printf("Erro: Dados recebidos excederam o tamanh
o do buffer.\n");
printf("Sugesto: Aumentar buffer!\n");
continua = 0;
}
else
{
tratamensagem(rx);
}
}
}
//
//
//
teste de envio
if (status == -1)
{
perror("Erro na chamada write");
close(sd);
exit(1);
}
//
chamada close
status = close(sd);
//
}
void tratamensagem(char *mensagem)
{
cJSON *root, *aux;
char *textaux, tpvFilename[] = "tpv0.log";
int number;
root = cJSON_Parse(mensagem);
if (!root) {printf("Error before: [%s]\n",cJSON_GetErrorPtr()); exit(1);
}
textaux = cJSON_GetObjectItem(root,"class")->valuestring;
if (strcmp(textaux, "VERSION") == 0)
{
if (!salvarLog(mensagem, "version.log"))
{
exit(1);
}
}
else if (strcmp(textaux, "DEVICES") == 0)
{
if (!salvarLog(mensagem, "devices.log"))
{
exit(1);
}
}
else if (strcmp(textaux, "DEVICE") == 0)
{
if (!salvarLog(mensagem, "devices.log"))
{
exit(1);
}
}
else if (strcmp(textaux, "TPV") == 0)
{
number = cJSON_GetObjectItem(root,"mode")->valueint;
tpvFilename[3] += (char)number;
if (!salvarLog(mensagem, tpvFilename))
{
exit(1);
}
}
else if (strcmp(textaux, "WATCH") == 0)
{
if (!salvarLog(mensagem, "watch.log"))
{
exit(1);
}
}
else if (strcmp(textaux, "SKY") == 0)
{
if (!salvarLog(mensagem, "sky.log"))
{
exit(1);
}
}
else
{
if (!salvarLog(mensagem, "desconhecido.log"))
{
exit(1);
}
}
cJSON_Delete(root);
}
int salvarLog(char *mensagem, char *filename)
{
FILE *file;
char mode[] = "a";
file = fopen(filename, mode);
if (file == NULL)
{
perror("Erro abrindo arquivo");
return 0;
}
fwrite(mensagem, sizeof(char), strlen(mensagem), file);
fwrite("\n", sizeof(char), strlen("\n"), file);
fclose(file);
return 1;
}
void signal_handle(int signum)
{
printf("Pegou sinal %d\nFinalizando...", signum);
continua = 0;
}