Meta 1 Final

Registo de cliente por argumento linha comandos
This commit is contained in:
José Valdiviesso 2019-11-24 00:01:36 +00:00
parent 3da12c53b5
commit e98a64ef82
2 changed files with 89 additions and 28 deletions

116
client.c
View File

@ -36,33 +36,95 @@ int main(int argc, char *argv[]){
fd_servidor = open("CPservidor", O_WRONLY);
//registar cliente no servidor
do{
printf("Nome de Utilizador: ");
//get username
fgets(username,32,stdin);
//build message to server
strcpy(msg2sv.cmd,"register");
strcpy(msg2sv.opts,username);
//send message
write(fd_servidor, &msg2sv, sizeof(msg2sv));
//read reply
fd_cliente = open(msg2sv.fifostr,O_RDONLY);
read(fd_cliente,&svResp,sizeof(svResp));
close(fd_cliente);
//process reply
if(svResp.code==1){
printf("[CLIENT] Cliente registado no servidor!\n");
}else if(svResp.code==2){
printf("[ERROR] Nome de Utilizador ja existente\n");
}else{
printf("[ERROR] Erro inesperado...\nA sair...\n");
/* FECHAR "CP" DO SERVIDOR (close) */
close(fd_servidor);
/* REMOVER "cp" DO CLIENTE - EU (UNLINK) */
unlink(msg2sv.fifostr);
exit(1);
}
}while(svResp.code!=1);
if(argc == 2){// nome de utilizador inserido como argumento
char uname[32];
i=0;
do{
strcpy(uname,argv[1]);
if(i==0){//registo username sem numeros
strcpy(msg2sv.cmd,"register");
strcpy(msg2sv.opts,uname);
//send message
write(fd_servidor, &msg2sv, sizeof(msg2sv));
//read reply
fd_cliente = open(msg2sv.fifostr,O_RDONLY);
read(fd_cliente,&svResp,sizeof(svResp));
close(fd_cliente);
//process reply
if(svResp.code==1){
printf("[CLIENT] Cliente registado no servidor!\n");
printf("[CLIENT] O Teu Username: %s\n",uname);
}else if(svResp.code==2){
printf("[ERROR] Nome de Utilizador ja existente...\n");
printf("[CLIENT] A tentar outro username...\n");
i++;
}else{
printf("[ERROR] Erro inesperado...\nA sair...\n");
/* FECHAR "CP" DO SERVIDOR (close) */
close(fd_servidor);
/* REMOVER "cp" DO CLIENTE - EU (UNLINK) */
unlink(msg2sv.fifostr);
exit(1);
}
}else{// username ja existente... adicionar numeros
sprintf(uname,"%s%d", argv[1], i); //gerar username novo
//registar
strcpy(msg2sv.cmd,"register");
strcpy(msg2sv.opts,uname);
//send message
write(fd_servidor, &msg2sv, sizeof(msg2sv));
//read reply
fd_cliente = open(msg2sv.fifostr,O_RDONLY);
read(fd_cliente,&svResp,sizeof(svResp));
close(fd_cliente);
//process reply
if(svResp.code==1){
printf("[CLIENT] Cliente registado no servidor!\n");
printf("[CLIENT] O Teu Username: %s\n",uname);
}else if(svResp.code==2){
printf("[ERROR] Nome de Utilizador ja existente...\n");
printf("[CLIENT] A tentar outro username...\n");
i++;
}else{
printf("[ERROR] Erro inesperado...\nA sair...\n");
/* FECHAR "CP" DO SERVIDOR (close) */
close(fd_servidor);
/* REMOVER "cp" DO CLIENTE - EU (UNLINK) */
unlink(msg2sv.fifostr);
exit(1);
}
}
}while(svResp.code!=1);
}else{// argumentos diferente de 2
do{
printf("Nome de Utilizador: ");
//get username
fgets(username,32,stdin);
username[strlen(username)-1]='\0';
//build message to server
strcpy(msg2sv.cmd,"register");
strcpy(msg2sv.opts,username);
//send message
write(fd_servidor, &msg2sv, sizeof(msg2sv));
//read reply
fd_cliente = open(msg2sv.fifostr,O_RDONLY);
read(fd_cliente,&svResp,sizeof(svResp));
close(fd_cliente);
//process reply
if(svResp.code==1){
printf("[CLIENT] Cliente registado no servidor!\n");
}else if(svResp.code==2){
printf("[ERROR] Nome de Utilizador ja existente\n");
}else{
printf("[ERROR] Erro inesperado...\nA sair...\n");
/* FECHAR "CP" DO SERVIDOR (close) */
close(fd_servidor);
/* REMOVER "cp" DO CLIENTE - EU (UNLINK) */
unlink(msg2sv.fifostr);
exit(1);
}
}while(svResp.code!=1);
}
do{
//sinais

View File

@ -60,7 +60,6 @@ int main(int argc, char *argv[]){
printf("funciona!\n");
printf("%s\n",clResp.opts);
}else if(strcmp(clResp.cmd,"register")==0){
clResp.opts[strlen(clResp.opts)-1]='\0';
if(verifyUserName(users,&userCounter,clResp.opts)==1){
msg2cl.code=2;
//responde