remover cliente da lista quando ele sai
This commit is contained in:
parent
17f7f30d8f
commit
ab40e8652d
7
client.c
7
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;
|
||||
|
|
3
dec.h
3
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);
|
||||
void desligarClientes(clients *users);
|
||||
clients *removeUser(clients *users, char *cp, int *nUsers);
|
9
makefile
9
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}
|
||||
|
|
34
server.c
34
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;
|
||||
}
|
BIN
verificador
BIN
verificador
Binary file not shown.
Loading…
Reference in New Issue