utiles_v2017/gconect_srv.cpp

119 lines
3.2 KiB
C++

#include "StdAfx.h"
#include "gconect_srv.h"
//*****************************************************************************************************************
Cgconect_srv::Cgconect_srv(void)
{
nconex=0;
fin=FALSE;
}
//*****************************************************************************************************************
Cgconect_srv::~Cgconect_srv(void)
{
}
//*****************************************************************************************************************
void Cgconect_srv::log_ext( __time64_t tiemp, char *modulo, char *fmt )
{
Msg_evento_log m;
m.tiempo=tiemp;
strcpy(m.nivel,modulo);
strcpy(m.nivel,fmt);
inter_msg.entro();
mens+m;
inter_msg.salgo();
}
//*****************************************************************************************************************
Cproceso_cliente* Cgconect_srv::crea_cliente( void )
{
if (fin)
return NULL;
Cclient_gconect_srv *cli=new Cclient_gconect_srv();
if (!cli)
return NULL;
strcpy(cli->nombre, "Cliente gconex_srv");
cli->principal = this;
nconex++;
return cli;
}
//*****************************************************************************************************************
//*****************************************************************************************************************
void Cclient_gconect_srv::rum()
{
int nv=0;//numero de veces esperando sin recivir nada
int nb;//numero de bytes recividos en el paquete
BOOL procesa=FALSE;//indica si hay paquetes a procesar
BYTE *buffer;//buffer donde se almacena paquete recibido
BYTE buf[256];//buffer secundario de envios
Usuario_conx_0 *usu=NULL;//usuario logeado
codifica=FALSE;//indica si la comunicacion va cifrada
while(!*soc->pirate && nv<6000 && !principal->fin)
{
//pillapaquete-----------------------------------------
if(!soc->recibe_package(0))
{
Sleep(10);
nv++;
}
else
{
if (soc->cab.nb>0)
{
nb=soc->cab.nb;
procesa=TRUE;
codifica=0;
nv=0;
if (soc->cab.flags & FLAG_PACKAGE_HEAD_0_ENCRIPT1)
codifica=1;
}
}
if (nb<sizeof(int))//recivida basura
continue;
if (!procesa || principal->fin )
continue;
nv=0;
procesa=FALSE;
//se resta lo que ocupa el entero
nb-=sizeof(int);
if (nb>0)
buffer=&soc->buf[sizeof(int)];
else
buffer=FALSE;
//procesa paquete-------------------------------------------------------------------
switch(*(int*)soc->buf)
{
case PETICION_GENERAL_PRESENTA:
{
break;
}
case PETICION_GENERAL_OK:
{
//theApp.log.loguea(_time64(NULL),"cliente","Recivido paquete ok");
buf[0]=PETICION_GENERAL_OK;
soc->envia_package(buf,1,codifica);
break;
}
case PETICION_GENERAL_DESCONECTA:
{
break;
}
case PETICION_GENERAL_DAME_LOG://hace falta login
{
break;
}
case PETICION_GENERAL_TOMA_COMANDO://hace falta login
{
principal->escucha->on_recivido(soc,buffer,nb);
break;
}
default://paquete desconocido se cierra socket
{
*soc->pirate=TRUE;//sale el thead
}
}
}
//descontamos thread---------------------------------------------------------
principal->escucha->borra_cliente(this);
}
//*****************************************************************************************************************