utiles_v2017/control_usu_con.cpp

175 lines
3.6 KiB
C++

#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<us.n; i++)
{
if (us[i].flags & FLAG_USUARIO_CONEXION_VACIO)
{
nb--;
memcpy(&us[i],u,sizeof(Usuario_conx_0));
us[i].id=i;
return i;
}
}
}
us+*u;
us[us.n-1].id=us.n-1;
return us.n-1;
}
//********************************************************************
Usuario_conx_0* Ccontrol_usu_con::get( char* nombre )
{
if (us.n<=0)
return NULL;
for (int i=0; i<us.n; i++)
{
if (us[i].flags & FLAG_USUARIO_CONEXION_VACIO)
continue;
if (strcmp(nombre, us[i].nombre)==0)
return &us[i];
}
return NULL;
}
//*****************************************************************