diff --git a/client b/client deleted file mode 100644 index f749082..0000000 Binary files a/client and /dev/null differ diff --git a/client.c b/client.c index 3da2df2..10b42b6 100644 --- a/client.c +++ b/client.c @@ -79,6 +79,9 @@ int main(int argc, char *argv[]){ } if(palavra[0]!=NULL){ if(strcmp(palavra[0],"sair")==0){ + printf("[CLIENT] Avisar servidor para me remover\n"); + strcpy(msg2sv.cmd, "leaving"); + write(fd_servidor, &msg2sv, sizeof(msg2sv)); printf("[CLIENT] A sair!\n"); sair = 1; }else if(strcmp(palavra[0],"send")==0){ @@ -86,9 +89,9 @@ int main(int argc, char *argv[]){ strcpy(msg2sv.opts, palavra[1]); /* ENVIAR PEDIDO PARA "CP" DO SERVIDOR (write) */ i = write(fd_servidor, &msg2sv, sizeof(msg2sv)); - }else if(strcmp(palavra[0],"desligar")==0){ + }else if(strcmp(palavra[0],"shutdown")==0){ printf("[CLIENT] A Desligar servidor!\n"); - strcpy(msg2sv.cmd, "DESLIGAR"); + strcpy(msg2sv.cmd, "shutdown"); write(fd_servidor, &msg2sv, sizeof(msg2sv)); printf("[CLIENT] A sair!\n"); sair = 1; diff --git a/dec.h b/dec.h index d4677fd..7e2982d 100644 --- a/dec.h +++ b/dec.h @@ -5,4 +5,5 @@ clients *addUser(clients *users, int *nUsers, char *username, int pid, char *fif char *getUsernameFromfifo(clients *users, char *fifo); void listusers(clients *users); void closeapp(int sig); -void desligarClientes(clients *users); \ No newline at end of file +void desligarClientes(clients *users); +clients *removeUser(clients *users, char *cp, int *nUsers); \ No newline at end of file diff --git a/makefile b/makefile index 166406a..1b88048 100644 --- a/makefile +++ b/makefile @@ -12,9 +12,6 @@ LINKERFLAG = -lm SRCS := $(wildcard *.c) BINS := $(SRCS:%.c=%) -install: - cp ${BINS} ~/TP - all: ${BINS} cp ${BINS} ~/TP @@ -26,6 +23,12 @@ all: ${BINS} @echo "Creating object.." ${CC} -c $< +cliente: client.o + +gestor: server.o + +verificador: verificador.o + clean: @echo "Cleaning up..." rm -rvf *.o ${BINS} diff --git a/server b/server deleted file mode 100644 index 8624b13..0000000 Binary files a/server and /dev/null differ diff --git a/server.c b/server.c index d176711..57405ca 100644 --- a/server.c +++ b/server.c @@ -49,7 +49,7 @@ int main(int argc, char *argv[]){ printf("[SERVER] nao da\n"); sleep(1); continue; - }else if(strcmp(clResp.cmd,"DESLIGAR")==0){ + }else if(strcmp(clResp.cmd,"shutdown")==0){ printf("[SERVER] O servidor vai desligar\n"); desligarClientes(users); //TODO implementar desligar outros clientes! @@ -86,8 +86,13 @@ int main(int argc, char *argv[]){ close(fd_cliente); //fim da resposta }else if(strcmp(clResp.cmd,"list")==0){ - printf("[SERVER] A listar users...\n"); + printf("[SERVER] A listar %d clientes...\n",userCounter); listusers(users); + }else if(strcmp(clResp.cmd,"leaving")==0){ + printf("[SERVER] Cliente desligado...\n"); + users=removeUser(users,clResp.fifostr,&userCounter); + printf("[SERVER] Cliente removido!\n"); + uinit = users; } }while(sair==0); @@ -122,7 +127,7 @@ int verifyUserName(clients *users, int *nUsers, char *username){ } clients *addUser(clients *users, int *nUsers, char *username, int pid, char *fifostr){ - *nUsers++; + (*nUsers)++; clients *uinit = users; if(users == NULL){//adicionar primeiro user users = malloc(sizeof(clients)); @@ -175,4 +180,27 @@ void desligarClientes(clients *users){ kill(users->pid,10); users=users->prox; } +} + +clients *removeUser(clients *users, char *cp, int *nUsers){ + (*nUsers)--; + clients *uinit = users; + clients *prev; + //verificar se o user que saiu foi o 1. na lista + if(strcmp(users->fifostr,cp)==0){ + //é o primeiro do lista + uinit=users->prox; + free(users); + }else{ + //nao é o primeiro da lista + while(users!=NULL){ + prev = users; + users = users->prox; + if(strcmp(users->fifostr,cp)==0){ + prev->prox = users->prox; + break; + } + } + } + return uinit; } \ No newline at end of file diff --git a/verificador b/verificador deleted file mode 100644 index f5b68c7..0000000 Binary files a/verificador and /dev/null differ