utiles_v2017/gconect_srv.h

58 lines
2.3 KiB
C++
Raw Permalink Blame History

#pragma once
#include "_log.h"
#include "garray_cicli.h"
#include "proceso_cliente.h"
#include "sock_sv.h"
//falta hacer login revision de paquetes y clase generica de usuarios
class Cclient_gconect_srv;
class UTILES_EXPORT C_escucha_conex_srv//clase para escuchar paquetes recividos en conex_srv
{
public:
virtual void on_recivido(Csock_cl *soc, BYTE *buf, int nb)=0;//puntero a socket, puntero a paquete, numero de bytes del paquete
//para desconectar poner a true la variable pirate del soc
virtual void borra_cliente(Cclient_gconect_srv *cli)=0;//funcion en la que se entra cuando se cierra un cliente(se ha de mandar un mensaje a el principal)
//no se olvide de restar 1 al numero de thread
};
//clase conexion entre servidores (servicios) y aplicaciones de administracion
class UTILES_EXPORT Cgconect_srv: public C_escucha_log, public Cescucha_sock_sv
{
public:
//variables----------------------------
Cgarray_cicli<Msg_evento_log> mens;//cola de mensajes de log
Clock inter_msg;//interlock para protejer cola de mensajes
Csock_sv soc_sv;//socket de escucha
C_escucha_conex_srv *escucha;//recibe paquetes de conexion si no son de log
BOOL fin;//indica si hay que irse o no;
int nconex;//indica el numero de conexiones activas en el momento
/*Clock inter_conex;//interlock para gestionar clientes
Csock_cl *soc_basura;//puntero a socket para borrar*/
//v y d--------------------------------
Cgconect_srv(void);
~Cgconect_srv(void);
//funciones----------------------------
virtual void log_ext( __time64_t tiemp, char *modulo, char *fmt );//pone otro mensaje en cola
virtual Cproceso_cliente* crea_cliente( void );//funcion que crea el cliente
};
class UTILES_EXPORT Cclient_gconect_srv: public Cproceso_cliente//thread de clientes
{
public:
BOOL codifica;//indica si la comunicacion va cifrada
Cgconect_srv *principal;//puntero a clase principal
virtual void rum();//funcion thead de conexion
};
//consejos de utilizacion-----------------------------------------
/*
crear clase y configurar interface (escucha).
configurar socket y poner en lisener.
En el evento borra_cliente enviar un mensaje al que a creado el socket listener.
Dentro de dicho mensaje restar 1 a la variable nconex y hacer un delete al argumento de cliente
para finalizar la aplicaci<63>n poner a true la variable fin y esperar a que salgan todos los clientes conectados (nconex<=0)
*/