#pragma once
//defines de carpetas-----------------------------------------------------------------------

#define D_WORK	"%dir_work%"
#define	D_LOG	"%dir_log%"
#define D_APP	"%dir_exe%"
#define D_DAT	"%dir_dat%"
#define P_CONG	"%p_config%"

//define para comunicacion------------------------------------------------------------------
#define	VERSION_PACKAGE_HEAD	1			//version de metodo de comunicacion
#define MAX_LONG_PACKAGE_0		0x04000		//maximo de bytes por package
//flags de cabecera

/*
#define	FLAG_PACKAGE_HEAD_0_INICIO			0x00000001
#define	FLAG_PACKAGE_HEAD_0_CONTINUACION	0x00000002
#define	FLAG_PACKAGE_HEAD_0_FINAL			0x00000004*/

#define FLAG_PACKAGE_HEAD_0_ENCRIPT1			0x00000001
#define FLAG_PACKAGE_HEAD_0_REPLICADO			0x00000002
//estructuras para comunicacion-------------------------------------------------------------
typedef struct Package_head_0//cabecera  base de la cumunicación
{
	int version;			//version de comunicacion
	int	flags;				//flags
	int nb;					//numero de bytes del paquete
	int n;					//numero de bloques de este paquete
}Package_head_0;
//en esta version el identificador de los paquetes sera un entero (int)
//paquetes generales de envio----------------------------------------------------------------
#define PETICION_GENERAL_NO					0//paquete de negacion

#define PETICION_GENERAL_PRESENTA			1//peticion de presentacion usuario y key
#define PETICION_GENERAL_OK					2//respuesta ok automatica
#define PETICION_GENERAL_DESCONECTA			3//peticion de desconexion
#define PETICION_GENERAL_DAME_LOG			4//peticion de eventos (normalmente con id)
#define PETICION_GENERAL_TOMA_COMANDO		5//peticionde comando para servidor
#define PETICION_GENERAL_FIN				6


//define para usuarios------------------------------------------------------------------------
#define	VERSION_USUARIO_CONEXION	1			//version de usuarios
//flags usuarios
#define FLAG_USUARIO_CONEXION_INDI			0x00000001//indica que solo se acepta una conexion por dicho usuario
#define FLAG_USUARIO_CONEXION_EN_USO		0x00000002//indica que el usuario esta en uso actualmente
#define FLAG_USUARIO_CONEXION_VACIO			0x00000004//indica que el usuario esta borrado
#define FLAG_USUARIO_CONEXION_BLOQ			0x00000008//indica que el usuario esta bloqueado (no se puede usar)
//flags archivo
#define FLAG_FILE_USUARIO_CONEX_ENCRIP		0x00000001//indica que el archivo esta encriptado
//flags permisos

//estructura para usuarios---------------------------------------------------------------------
typedef struct Usuario_conx_0//informacion de usuario
{
	int flags;
	int id;					//identificador de usuario
	int	permisos;			//flags de permisos
	int ia;					//informacion adicional
	int ncon;				//numero de conectados con este usuario
	char nombre[32];		//nombre de usuario
	char clave[32];			//calve de usuario
}Usuario_conx_0;

typedef struct Head_usuario_conex_0//cabecera  de archivo de usuario
{
	int version;			//version informacion de usuaros
	int	flags;				//flags
	int n;					//numero de usuarios en archivo
}Head_usuario_conex_0;

//interface de elemento que se transfiere----------------------------------
class IdataTransfer
{
public:
	//para lectura
	virtual __int64 getNB_it()=0;//devuelve numero de bites totales de informacion
	virtual __int64 getNext_it(void* buf,__int64 nb)=0;//copia en buffer buf el los siguientes nb bytes y devuelve el numero total de bites leidos

	//lectura y escritura
	inline virtual bool setPosition_it(__int64 nb){ return false; };//se posiciona en el byte nb los datos

	//para escritura-----------
	inline virtual bool set_it(void* buf, __int64 nb){ return true; };//prepara datos para recivir nb bites
};