175 lines
3.6 KiB
C++
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;
|
|
}
|
|
//*****************************************************************
|