Page 1 of 1

gestión de licencias concurrentes en red local

PostPosted: Fri Jun 14, 2013 8:58 pm
by lucasdebeltran
Hola,

Como vamos a utilizar definitivamente MSVC, no vamos a poder seguir utilizando las mochilas de Safenet en modo red lan porque no tenemos los fuentes de la librería que hizo Ren e Flores.

Había pensado en controlarlo con la base de datos de los usuarios que está en el servidor , de modo que cuando se entra al programa al seleccionar el usuario y autentificarse, marco el campo lConectado con .T., y cuando sale del programa lo marco como .F., de modo que:
- No se pueden crear más usuarios que los adquiridos. (esto no plantea problemas)
- Un usuario no puede iniciar sesión más de 1 vez, porque se controla con lConectado.

El problema me surge cómo tratar las salidas anormales del programa, bien por cuelgue, corte de luz, etc, porque en el servidor lConectado seguirá en .T. y no le dejará volver a iniciar sesión.

Si permito liberar la sesión entonces nos van a engañar porque el usuario se logueará, y luego el Administrador le liberará la sesión, burlándose así el control de las licencias en red.

¿Se os ocurre por favor alguna idea?.

Muchísimas gracias.

Un saludo

Re: gestión de licencias concurrentes en red local

PostPosted: Fri Jun 14, 2013 9:09 pm
by pablovidal
Mira a ver si esto te sirve !!!

Code: Select all  Expand view
#define SP_UPDCMD_CHANGE_DEVICE_TIME       0x21

Function SNGetHora( hHeader, aData )
Return( SFNTGetDeviceInfo( hHeader, @aData ) == 0 )

Function SNGetString( )
Return Nil

//-------------------------------------------------------------------------------------------------------
#pragma BEGINDUMP
#include <hbapi.h>

#include "SentinelKeys.h"         /*  Header file for the Sentinel Keys client library  */
#include "SentinelKeysLicense.h"  /*  Header file for this License  */

//-------------------------------------------------------------
// Obtiene la licencia
//-------------------------------------------------------------
HB_FUNC( SFNTGETLICENSE )
{
  SP_HANDLE license ;
  hb_retnl( SFNTGetLicense( DEVELOPERID, SOFTWARE_KEY, LICENSEID, 32, &license ) ) ;
  hb_stornl( ( LONG ) license, 1 );
}


//-------------------------------------------------------------
// Lee un string desde  la llave
//-------------------------------------------------------------
HB_FUNC( SFNTREADSTRING )
{
   SP_BYTE value[ 256 ];
   SP_DWORD length = hb_parnl( 4 );

   hb_retnl( ( LONG ) SFNTReadString( ( SP_HANDLE ) hb_parnl( 1 ), ( SP_DWORD ) hb_parnl( 2 ), value, length ) );
   hb_storc( value, 3 );
   hb_xfree( value );
}

//-------------------------------------------------------------
// Lee la fecha y hora de la llave
//-------------------------------------------------------------
HB_FUNC( GETDATETIME )
{

 SP_DEVICE_INFO deviceInfo;
 hb_retnl( SFNTGetDeviceInfo( ( SP_HANDLE ) hb_parnl( 1 ), &deviceInfo ) ) ;

 hb_stornl( ( LONG ) deviceInfo.timeValue.year      , 2, 1 );
 hb_stornl( ( LONG ) deviceInfo.timeValue.month     , 2, 2 );
 hb_stornl( ( LONG ) deviceInfo.timeValue.dayOfMonth, 2, 3 );
 hb_stornl( ( LONG ) deviceInfo.timeValue.hour      , 2, 4 );
 hb_stornl( ( LONG ) deviceInfo.timeValue.minute    , 2, 5 );
 hb_stornl( ( LONG ) deviceInfo.timeValue.second    , 2, 6 );
}

//-------------------------------------------------------------
// Lee un string desde  la llave
//-------------------------------------------------------------
HB_FUNC( SFNTGETDEVICEINFO )
{
   SPP_DEVICE_INFO deviceInfo;

   hb_retnl( SFNTGetDeviceInfo( ( SP_HANDLE ) hb_parnl( 1 ), deviceInfo ) ) ;

   hb_stornl( deviceInfo->timeValue.year      , 2, 1 );
   hb_stornl( deviceInfo->timeValue.month     , 2, 2 );
   hb_stornl( deviceInfo->timeValue.dayOfMonth, 2, 3 );
   hb_stornl( deviceInfo->timeValue.hour      , 2, 4 );
   hb_stornl( deviceInfo->timeValue.minute    , 2, 5 );
   hb_stornl( deviceInfo->timeValue.second    , 2, 6 );
}

#pragma ENDDUMP

Re: gestión de licencias concurrentes en red local

PostPosted: Fri Jun 14, 2013 9:19 pm
by Marcelo Via Giglio
Hola,

puedes intentar algo asi:

ingresa el usuario -> bloqueas su registro de usuario (u otro registro por usuario)

el número de bloqueos es el número de concurrentes, si se sale del sistema creo que se quitaran los bloqueos por lo que no habria problemas por salidas por la ventana.

No lo he probado, pero me intriga si funciona, nos cuentas?

saludos

Marcelo

Re: gestión de licencias concurrentes en red local

PostPosted: Fri Jun 14, 2013 10:09 pm
by benjiben143
Hola buenas tardes

yo lo haria asi

al entrar el usuario x

lo activaria como .t.

si entra el mismo usuario y esta la activacion como .t. , pues no darle entrada

si el programa se cae por x o y

lo manejeria asi

al entrar activarlo como .t., y en un campo agregarle la hora en la que entro

dentro del programa con un timer
cada x tiempo por ejemplo 1 minuto ponerle la hora en que esta accesando el usuario

si al momento de entra de vuelta el mismo usuario y checas la hora actual con la ultima hora del usuario y no tiene hora asiganda y pasa de mas de un minuto quiere decir que tubo una salida inesperada


y con eso le puedes dar acceso,,, y si no pasa del minuto quiere decir que ay esta el usuario todavia


saludos

Re: gestión de licencias concurrentes en red local

PostPosted: Sat Jun 15, 2013 9:18 am
by lucasdebeltran
Muchas gracias, voy a seguir investigando.

Pablo, las funciones que necesito serían éstas:

Code: Select all  Expand view
function SPRORELEASELICENSE (...)
return nil


function SPROFORMATPACKET (...)
return nil



function SPROINITIALIZE (...)
return nil



function SPROFINDFIRSTUNIT(...)
return 0



function SPROSETHEARTBEAT(...)
return nil



function SPROREAD (a,b,c,d)
 



Muchas gracias a todos.

Saludos