Olivia_v2017/includes/Utiles/sock_sv.h

50 lines
1.6 KiB
C++

#pragma once
#include "Csock_cl.h"
#include "th.h"
#include <afxwin.h>
class Cproceso_cliente;
class UTILES_EXPORT Cescucha_sock_sv//interface para que te entren los accept
{
public:
virtual Cproceso_cliente* crea_cliente(BOOL *pirate)=0;//funcion que crea los procesos cliente en el accept (devuelve null si no se acepta)
};
//socket generico si se pone una escucha crea los socket cliente desde la escucha
//si no desde la funcion crea_cliente
//si el proceso cliente ya tiene un socket creado no se crea si no se crea un socket cliente
class UTILES_EXPORT Csock_sv : public Csock_cl
{
public:
BOOL sock_cerrado;
Cescucha_sock_sv *escucha;
Csock_sv(BOOL* sal=NULL, C_error*e=NULL);
virtual ~Csock_sv(void);
Cproceso_cliente* (*crea_cliente)(BOOL *pirate );
//funciones servidor------------------------------------
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
//virtual void run();
//funciones virtuales de thread win
};
//socket servidor con thread y cola de evntos propia
class UTILES_EXPORT Csock_svThread :public CWinThread
{
//DECLARE_DYNCREATE(Csock_svThread)
BOOL isLisening;
BOOL pireateTread;
int port, type, evenFlag;
char * url;
public:
Cescucha_sock_sv *escucha;
Cproceso_cliente* (*crea_cliente)(BOOL *pirate );
BOOL liseningThread(int port, char * url, int type = SOCK_STREAM, int evenFlag = FD_ACCEPT | FD_READ | FD_CLOSE );//inicia escucha
void close();//cierra escucha
//funciones aux------------------------
~Csock_svThread();
Csock_svThread();
//AfxSocketInit()
virtual BOOL InitInstance() ;
virtual int Run() ;
CString sName ;//nombre thread
};