utiles_v2017/str_socket.h

87 lines
3.2 KiB
C++

#pragma once
#include <afxsock.h>
#include "base_head.h"
#define MAX_CHAR_BLOQ_STRSOCKET 1024 //Maximo de caracteres por envio
#include "_error.h"
#define ESPERA_STRSOCKET 1 //milis en sleep
#define ESPERA_SEG_STRSOCKET 3//SEGUNDOS MAXIMOS INTENTANDO RECIBIR ENVITOS
#define VECES_ESPERA_STRSOCKET ((1000 * ESPERA_SEG_STRSOCKET) / ESPERA_STRSOCKET)
#define MIN_REALLOC_STR_SOC 512 //bytes
/*
Socket cliente para envio de informacion ascii (string)
*/
class UTILES_EXPORT Cstr_socket : public CAsyncSocket
{
public:
//variables--------------------------------------
C_error er;//variable que da info de posibles errores
BOOL pirate;//==TRUE -> se cancela todas las tareas del socket
long cli_currando;//indica que el socket esta en uso
Cstr_socket *pp; //puntero al padre
//variables aux----------------------------------
private:
char *buf;//buffer de envios
int n, m;//ocupacion y capacidad del buffer
int nb;//indica el numero de bytes que va por envio total
public:
//c y d------------------------------------------
Cstr_socket(void);
~Cstr_socket(void);
public:
//funciones--------------------------------------
BOOL crear(char *ip=NULL, int puerto=0);//crea el socket en la ip y puerto de salida indicados
BOOL conecta(char *ip, int puerto);//contecta a servidor
char* recibir();//recibe string;
BOOL envia( char *fmt, ...);//envia string
void cierra();//cierra socket
char *getbuf();//devuelve buffer del socket
//funciones auxiliares---------------------------
private:
BOOL cuida_mem(int nbb);//pide memoria si hace falta
int recibir(BYTE *b, int nbb);//recive nbb bytes y los deja en b
BOOL enviar(int nbb,BYTE *b);
};
/*
Socket servidor para envio de informacion ascii (string)
*/
class UTILES_EXPORT Cstr_socket_srv : public Cstr_socket
{
//variables aux----------------------------------
private:
HWND wnd;//ventana a la que mandar eventos
int id_even, id_comman;
BOOL *sal_soc;
int t_out;//tiempo de salida sin hacer nada
__int64 t;
public:
//c y d------------------------------------------
Cstr_socket_srv(void);
~Cstr_socket_srv(void);
//funciones--------------------------------------
virtual BOOL on_datos_recibidos(char *txt)=0;//funcion donde procesar los datos
virtual Cstr_socket_srv* crea_cliente()=0;//funcion donde procesar los datos
BOOL pon_escucha(char *ip, int puerto);
void pon_wnd_destruc(HWND wnd,int id_comman,int id_even);
//funciones auxiliares---------------------------
private:
public:
void run();
virtual void OnAccept(int nErrorCode);
virtual void OnClose(int nErrorCode);
static UINT th_funcion(LPVOID pp);
void pon_tout( int t_out );
};
//funciones de socket cliente para pinvoke-----------------------------------------------------
extern "C" UTILES_EXPORT Cstr_socket *str_socket_crea();
extern "C" UTILES_EXPORT BOOL str_socket_conecta(Cstr_socket *soc, char *ip, int puerto, char* ip_local=NULL);
extern "C" UTILES_EXPORT BOOL str_socket_envia(Cstr_socket *soc, char *txt);
extern "C" UTILES_EXPORT int str_socket_recive(Cstr_socket* soc);
extern "C" UTILES_EXPORT void str_socket_dame_buf(Cstr_socket* soc, char* buf);
extern "C" UTILES_EXPORT void str_socket_dame_error(Cstr_socket* soc, char* error);
extern "C" UTILES_EXPORT void str_socket_borra(Cstr_socket* soc);