diff --git a/client b/client new file mode 100644 index 0000000..f4930cf Binary files /dev/null and b/client differ diff --git a/client.c b/client.c index 10b42b6..23f2504 100644 --- a/client.c +++ b/client.c @@ -109,6 +109,17 @@ int main(int argc, char *argv[]){ strcpy(msg2sv.cmd, "list"); /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ i = write(fd_servidor, &msg2sv, sizeof(msg2sv)); + }else if(strcmp(palavra[0],"verifica")==0){ + strcpy(msg2sv.cmd, "verifica"); + strcpy(msg2sv.opts,palavra[1]); + /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ + i = write(fd_servidor, &msg2sv, sizeof(msg2sv)); + //ler resposta do servidor + /*fd_cliente = open(msg2sv.fifostr,O_RDONLY); + read(fd_cliente,&svResp,sizeof(svResp)); + close(fd_cliente);*/ + //processar resposta + //printf(svResp.resp); } } diff --git a/server b/server new file mode 100644 index 0000000..9f67cd3 Binary files /dev/null and b/server differ diff --git a/server.c b/server.c index 7f77864..6dc6786 100644 --- a/server.c +++ b/server.c @@ -27,7 +27,7 @@ int main(int argc, char *argv[]){ int userCounter = 0; srand(time(NULL)); - int fd_servidor, fd_cliente; + int fd_servidor, fd_cliente, fd_child[2]; /* VERIFICAR SE EXISTE "CP" DO SERVIDOR (access) -- APENAS UM!!!*/ if(access("CPservidor", F_OK)==0){ printf("[SERVIDOR] Ja existe um servidor!\n"); @@ -76,7 +76,6 @@ int main(int argc, char *argv[]){ close(fd_cliente); //fim resposta } - }else if(strcmp(clResp.cmd,"ping")==0){ sprintf(msg2cl.resp,"[SV] Olá %s (%s)\n",getUsernameFromfifo(users,clResp.fifostr), clResp.fifostr); printf("[SERVER] A responder ao Cliente %s",clResp.fifostr); @@ -93,6 +92,22 @@ int main(int argc, char *argv[]){ users=removeUser(users,clResp.fifostr,&userCounter); printf("[SERVER] Cliente removido!\n"); uinit = users; + }else if(strcmp(clResp.cmd,"verifica")==0){ + printf("[SERVER] A verificar '%s'\n",clResp.opts); + pipe(fd_child); + switch(fork()){ + case 0://child + close(fd_child[1]); + dup2(fd_child[0], STDIN_FILENO); + close(fd_child[0]); + execl("verificador", "./verificador", "words.txt", NULL); + default://me + close(fd_child[0]); + write(fd_child[1], clResp.opts, sizeof(clResp.opts)); + close(fd_child[1]); + wait(NULL); + } + } }while(sair==0); diff --git a/util.h b/util.h index 99e4e25..f26af8f 100644 --- a/util.h +++ b/util.h @@ -7,7 +7,7 @@ #define TAM_OPTS 128 #define TAM_RESP 512 -typedef struct{ +typedef struct st_mensagem{ int id; char titulo[TAM_TITULO]; char corpo[TAM_CORPO]; @@ -18,14 +18,14 @@ typedef struct{ struct mensagem * prox; }mensagem; -typedef struct{ +typedef struct st_topic{ int id; char nome[TAM_NOME]; struct mensagem * mensg; struct topic * prox; }topic; //guardar clientes -typedef struct{ +typedef struct st_clients{ int pid; char nome[TAM_NOME]; char fifostr[TAM_NOME]; @@ -40,7 +40,7 @@ struct clmsg{ char corpo[TAM_CORPO]; int duracao; }; -typedef struct{ +typedef struct st_cl2sv{ char fifostr[TAM_NOME]; //base int pid; @@ -52,7 +52,7 @@ typedef struct{ }cl2sv; //estructura de dados servidor --> cliente -typedef struct{ +typedef struct st_sv2cl{ int code; char type[TAM_CMD]; char resp[TAM_RESP]; diff --git a/verificador b/verificador new file mode 100644 index 0000000..adce2ee Binary files /dev/null and b/verificador differ diff --git a/verificador.c b/verificador.c index 8de53b7..cd8e6ad 100644 --- a/verificador.c +++ b/verificador.c @@ -34,6 +34,7 @@ int readWordFile(FILE * f, char wdef[][MAXWL], int maxw) { int checkWord(char * word, char wdef[][MAXWL], int maxw) { int i; for (i=0; i