#include "StdAfx.h" #include "control_usu_con.h" #include "_error.h" #include "b_file.h" //***************************************************************** Ccontrol_usu_con::Ccontrol_usu_con(void) { na=nb=0; } //***************************************************************** Ccontrol_usu_con::~Ccontrol_usu_con(void) { } //***************************************************************** int Ccontrol_usu_con::lee( char* path, C_error *er ) { return 0; } //***************************************************************** BOOL Ccontrol_usu_con::guarda( char*path ,C_error *er ) { /*Head_usuario_conex_0 head; Cb_file file; if(!file.abre(path,2,TRUE)) { return FALSE; }*/ return 0; } //***************************************************************** int Ccontrol_usu_con::add( Usuario_conx_0 *user ) { int ind; cerrojo.entro(); //revisa si repe------------------------ if (get(user->nombre)) { cerrojo.salgo(); return -1; } //lo pone en lista---------------------- ind=pon(user); cerrojo.salgo(); return ind; } //***************************************************************** Usuario_conx_0* Ccontrol_usu_con::conecta( char*nombre, char* key,int*err ) { Usuario_conx_0 *u, *user=(Usuario_conx_0*)malloc(sizeof(Usuario_conx_0)); *err=0; cerrojo.entro(); u=get(nombre); if (!u) { *err=1; goto va_mal; } if (u->flags & FLAG_USUARIO_CONEXION_BLOQ) { *err=3; goto va_mal; } else if ((u->flags & FLAG_USUARIO_CONEXION_EN_USO) && (u->flags & FLAG_USUARIO_CONEXION_INDI)) { *err=4; goto va_mal; } else if (strcmp(u->clave,key)) { *err=2; goto va_mal; } u->flags=u->flags | FLAG_USUARIO_CONEXION_EN_USO; u->ncon++; na++; memcpy(user,u,sizeof(Usuario_conx_0)); cerrojo .salgo(); return user; va_mal: cerrojo .salgo(); free(user); return NULL; } //***************************************************************** BOOL Ccontrol_usu_con::desconecta( Usuario_conx_0 *user ) { Usuario_conx_0 *u; int af,an; cerrojo.entro(); if (user->id>=us.n) { cerrojo.salgo(); return FALSE; } u=&us[user->id]; af=u->flags; an=u->ncon-1; *u=*user; u->ncon=an; if (an) u->flags=af; else u->flags=af & ~FLAG_USUARIO_CONEXION_EN_USO; na--; cerrojo.salgo(); free(user); return TRUE; } //***************************************************************** BOOL Ccontrol_usu_con::borra( Usuario_conx_0 *user ) { cerrojo.entro(); if (user->id>=us.n) { cerrojo.salgo(); return FALSE; } us[user->id].flags=us[user->id].flags & FLAG_USUARIO_CONEXION_VACIO; nb++; cerrojo.salgo(); return TRUE; } //***************************************************************** int Ccontrol_usu_con::esta( char *nombre ) { return 0; } //***************************************************************** BYTE* Ccontrol_usu_con::get_copy( int*nu,int modo/*=0 */ ) { return NULL; } //***************************************************************** void Ccontrol_usu_con::verifica() { } //***************************************************************** int Ccontrol_usu_con::pon(Usuario_conx_0 *u) { if (nb && us.n) { //hay vacios for (int i=0; i