AV-SOFT
AVLock SIMPLE
Introducción
Que es AVLock SIMPLE?
Como adquirir AVLock SIMPLE?
Nuevo en v5.1
Usando AVLock SIMPLE
Como instalar AVLock SIMPLE?
Conceptos Básicos
Configuración
Usuarios e Instancias
Esquemas de protección
Ejemplos
Nuevo Estilo
Ejemplo 1
Ejemplo 2
Ejemplo 3
Ejemplo 4
Ejemplo 5
Request Key
UserData Based
Ejemplos PayPal IPN
Propiedades
Métodos
El Online License Manager (OLM)
Como's
La utilidad Configurator
La utilidad RegMonitor
La Utilidad KeyGen
La Utilidad CodeCheck
La Utilidad KeyCheck
Información adicional
Acuerdo de licencia
Historia de versiones_2

Ejemplo 3

Top  Previous  Next

 

Items

En este ejemplo aprenderá a

Esquemas de protección

Código fuente

Breve práctica con el ejemplo 3a

Iniciar el periodo trial

Utilizar el panel de control del OLM

 

 

En este ejemplo aprenderá a:

1. Utilizar el componente AVLock SIMPLE en un esquema de protección con múltiples módulos (esquemas D, E y F).

2. Utilizar el panel de control del OLM para manejar licencias en línea.

 

 

Esquemas de protección

Este ejemplo implementa los esquemas D, E y F

 

 

              Esquema D

layout03

       Esquema E

layout06

                  Esquema F

layout07

 

El único cambio respecto del ejemplo 5 es que aquí se utiliza el OLM avanzado.

 

Y los implementa como se muestra en el siguiente diagrama de flujo:

 

Código fuente

 

procedure TForm1.FormCreate(Sender: TObject);

begin

 DoRegister(False);

end;

 

function TForm1.maxrecords(n:integer):string;

begin

 result := 'Unlimited';

 {$IFDEF SCHEME_F}

 case n of

 0: result:='50';

 1: result:='200';

 2: result:='1000';

 3: result:='5000';

 4: result:='20000';

 5: result:='100000';

 end;

{$ENDIF}

end;

 

procedure TForm1.DoRegister(force:boolean);

var F : TRegForm;

begin

 F:=TRegForm.Create(nil); //Create the registration Form

 try

   if force or (keydata.DaysLeft < 15) then F.ShowModal;

 finally

   FreeAndNil(F);

 end;

 maxrec := 'Unlimited';

 if (keydata.Status = Registered) then begin

   maxrec:=maxrecords(Values2Num(keydata.Values,2));

   Button1.Enabled := (IsValueOn(keydata.Values,3,0));

   Button2.Enabled := (IsValueOn(keydata.Values,3,1));

   Button3.Enabled := (IsValueOn(keydata.Values,3,2));

 end else begin

   {$IFDEF SCHEME_F}

     maxrec := '50';

  {$ENDIF}

   Button1.Enabled := False;

   Button2.Enabled := False;

   Button3.Enabled := False;

  {$IFDEF SCHEME_E}

     Form1.wait(10);

  {$ENDIF}

 end;

 LRecNo.Caption := maxrec;

end;

 

procedure TForm1.FormPaint(Sender: TObject);

begin

 {$IFDEF SCHEME_C}

 if (keydata.Status <> Registered) then begin

   showmessage('Not Registered');

   application.Terminate;

 end;

 {$ENDIF}

 if (keydata.TooManyInstances) then begin

   showmessage('Too many instances');

   application.Terminate;

 end;

 if not AVLockS51.IsLocal and (AVLockS51.activeinstances.count < 2) then begin

   showmessage('This application must be run first from the server.');

   application.Terminate;

 end;

end;

 

El esquema es similar al del ejemplo 1 pero ahora controla tres módulos especiales a través del campo "Values".

 

Lo que se ha explicado respecto al parámetro "force" en el ejemplo 1 también es válido para este ejemplo.

 

La versión (3a) es la versión de desarrollo donde se agregaron botones utilitarios para iniciar el periodo trial y para borrar los datos de registración a fin de tener nuevamente la  aplicación en estado original.

La versión (3b) es la versión definitiva donde el periodo trial se inicia automáticamente y se retiraron los botones utilitarios.

 

 

Breve práctica con el ejemplo 3a

 

Desde el IDE de Delphi Abra el ejemplo 3a (\Examples\3\a)

 

demo03a02

 

Ejecutar la aplicación

Presione el botón runbutton o F9 para iniciar la ejecución del programa.  En unos instantes podrá ver el formulario de registración:

 

demo03a03

 

Note que el estado corriente de registración es "Not registered" (No registrado). Esto es debido a que se ejecutó por primera vez el programa y en las versiones (a) de desarrollo no se inicia automáticamente el periodo trial.

 

Cuando Ud. pulsa el botón [Start Trial], el periodo trial se iniciará utilizando uno de tres métodos alternativos dependiendo de su directivo DEFINE. Vea abajo el código fuente relacionado:

 

procedure TRegForm.BtnTrialClick(Sender: TObject);

var res:string;

   err:integer;

begin

 if (keydata.Status = Unregistered) then

 begin

   res:='';

  {$IFDEF NO_OLM}

                  //(index,users,inst,startdate,days,values)

     err:=AVLock.MakeTrial(0,1,2,date,30,values);

     if (err=0) then res:='00';

   {$ENDIF}

   {$IFDEF BASIC_OLM}

                  //values, kind, Index, days, inst)

     res := AVLock.OnlineGetKeyB(values,0,0,30,1);

   {$ENDIF}

   {$IFDEF ADVANCED_OLM}

                  //(index,users,inst,days,values)

     res := AVLock.OnlineStartTrial(0,1,1,30,values);

  {$ENDIF}

   if (res='00') then begin

     showmessage('Trial started or synchronized successfully.');

     GetRegStatus;

   end else showmessage('Failed to start the trial period. Please review your Internet connection and try again.');

 end else if (keydata.KeyType = Trial) then showmessage('Trial already started.')

 else showmessage('Application already Registered.');

end;

 

1. Si definió NO_OLM, el periodo trial se iniciará utilizando el método MakeTrial(). The Offline Method.

 

2. Si definió BASIC_OLM, el periodo trial se inciará utilizando el método OnlineGetKeyB(), que es el método en línea utilizando el OLM básico.

 

3. Si definió ADVANCED_OLM, el periodo trial se inciará utilizando el método OnlineStartTrial(), que es el método en línea utilizando el OLM avanzado.

 

Si el estado es "No Registrado" cuando se pulse el botón [Continue >>] el comportamiento dependerá del esquema definido, de esta manera:

 

1. Si definió SCHEME_C, la aplicación terminará su ejecución. Vea el manejador de eventos OnPaint:

 

 {$IFDEF SCHEME_C}

 if (keydata.Status <> Registered) then begin

   showmessage('Not Registered');

   application.Terminate;

 end;

 {$ENDIF}

 

2. Si definió SCHEME_E, se mostrará una pantalla con una cuenta regresiva antes de continuar.

 

3. Si definió SCHEME_F, se limitará a 50 el número de registros permitidos durante el periodo trial.

 

Vea el código fuente del procedimiento DoRegister:

 

   {$IFDEF SCHEME_F}

     maxrec := '50';

   {$ENDIF}

   Button1.Enabled := False;

   Button2.Enabled := False;

   Button3.Enabled := False;

  {$IFDEF SCHEME_E}

     Form1.wait(10);

 {$ENDIF}

 

 

 

Iniciar el periodo trial

 

Item relacionado: Como iniciar el periodo trial

 

Para probar seleccione Special 1 y Special 2 y haga click sobre el botón [Start Trial]. Verá un cuadro de mensaje con el resultado de la operación, "Trial started or synchronized successfully":

 

demo03a07

 

Además podrá ver que el estado corriente de registración ha cambiado mostrando el mensaje que puede ver abajo:

 

demo01a07

 

Si ahora hace click sobre el botón [Continue >>] pasará al formulario principal de la aplicación donde verá el resultado de la operación realizada:

 

demo03a04

 

Puede ver que se habilitaron los botones correspondientes a las casillas de chequeo seleccionadas. Veamos ahora más detalles sobre como se hizo esto. En el formulario de registración está el botón [Show Registration Data] que le permitirá ver la siguiente pantalla:

 

 

demo03a05

 

Veamos un poco el código fuente utilizado para calcular el valor del campo Values en base a las casillas de chequeo seleccionadas:

 

function TRegForm.values:string;

var val: word;

begin

 val:=0;

 if ch1.Checked then val := 1;

 if ch2.Checked then val := val + 2;

 if ch3.Checked then val := val + 4;

 result := inttohex(val,3);

end;

 

Sobre la variable val se calcula el valor que luego será asignado al campo Values.

 

Si  "Special 1" está chequeado se agrega 1 a val   1 = 0001 en binario

Si  "Special 2" está chequeado se agrega 2 a val   2 = 0010 en binario

Si  "Special 3" está chequeado se agrega 4 a val   4 = 0100 en binario

 

Al chequear las casillas "Special 1", "Special 2" y "Special 3" obtenemos (1 + 2 + 4) = 7

 

Visto en formato binario:

 

Special 1 =  0001

Special 2 =  0010

Special 3 =  0100

         -------

Suma      =  0111

 

Ahora veamos el código fuente del cálculo del número de registros permitidos:

 

function TForm1.maxrecords(n:integer):string;

begin

 case n of

 0: result:='50';

 1: result:='200';

 2: result:='1000';  

 3: result:='5000';

 4: result:='20000';

 5: result:='100000';  //<---

 else result := 'Unlimited';

 end;

end;

 

. . .

maxrec:=maxrecords(Values2Num(F.keydata.Values,2));

. . .

 

La función Values2Num() extrae del campo Values el nibble seleccionado y lo convierte a valor decimal.

 

 

 

El ejemplo 3b

 

Aquí, todas las utilidades fueron removidas del formulario de registración y el inicio del periodo trial se lleva a cabo  en el evento OnCreate del formulario principal mediante el procedimiento Startrial cuyo código fuente se muestra a continuación:

 

 

procedure TRegForm.StartTrial;

begin

 if (keydata.Status = Unregistered) then begin

   {$IFDEF NO_OLM}

              //(index,users,inst,startdate,days,values)

    AVLock.MakeTrial(0,1,2,date,30,'007');

   {$ENDIF}

   {$IFDEF BASIC_OLM}

              //values, kind, Index, days, inst)

    AVLock.OnlineGetKeyB('007',0,0,30,1);

   {$ENDIF}

   {$IFDEF ADVANCED_OLM}

              //(index,users,inst,days,values)

    AVLock.OnlineStartTrial(0,1,1,30,'007');

 {$ENDIF}

 

   GetRegStatus;

 end;

end;

 

Hemos utilizado '007' como valor para el campo "Values". El nibble 3 utilizado es igual a 7, en binario 0111, por lo tanto habilita los tres módulos especiales durante el periodo trial. Si durante su práctica inició el periodo trial con el OLM básico con otro valor para el campo "Values", este no deberá ser cambiado a menos que Ud. borre el registro en el servidor con el botón [Remove Registration].

 

 

Utilizar el panel de control del OLM

 

Item relacionado: Como registrar la aplicación utilizando claves

 

Ahora accedamos al panel de control del OLM desde un navegador (Este ha sido probado con Google Chrome, Firefox, Opera e Internet Explorer).

Ingresemos la URL: http://av-soft/olm5/s5cp.php

 

En unos segundos veremos la pantalla que se ve abajo. Ingresemos la password abc123 y hagamos click sobre el botón[-> Go]:

 

cp01

En la pantalla de abajo, en el campo "search for" ingresemos 12301, o el AppID que corresponda al  ejemplo que se está probando. Seleccionamos "App ID" y hacemos click sobre el botón [-> Go] y se desplegarán los registros que coincidan con el AppID ingresado:

 

cp03

Ahora hagamos click sobre el icono Edit editicon y pasaremos al siguiente cuadro de edición:

 

editolm01

 

Aquí tenemos varias secciones:

 

Datos no modificables: Son los datos del registro que no se pueden modificar.

 

Datos del usuario: Nombre, Compañía y email.

 

Selección de la acción a tomar: Se puede seleccionar una acción a tomar cuando se solicite una sincronización de datos con el método Synchronize().

(1) Do not change registration status: Si se selecciona esta opción no se generará una nueva clave y los campos Moved, Extend y Paid se harán igual a 'N'.

(2) License is being moved to another computer: Asignar el campo Moved = 'Y'. Indicando que la licencia de este registro está siendo movida a otro computador.

(3) Allow to extend the trial period: Asignar el campo Extend = 'Y' para autorizar la generación de una nueva clave que extienda el periodo trial por un periodo adicional, normalmente 15 días, pero se puede cambiar asignando otro valor a la variable $extendays en el script genkeys3lib.php.

(4) The user paid for a new values field: Asignar el campo Paid = y (y minúscula) indicando que se debe generar una nueva clave tomando  como base la clave vigente actual donde se cambiará solo el campo values de la misma. Util con claves temporales para el caso en que se quiera agregar o quitar  un módulo controlado por el campo values o cambiar otra condición controlada por el campo values como ser el número de registros autorizados pero mantener el mismo periodo autorizado por la clave temporal vigente.  

(5) The user paid for a new key: Asignar el campo Paid = 'Y'. El usuario ha pagado por una nueva clave por lo que deberá generarse una nueva clave en base a los datos que se especificarán en la sección de abajo.

 

Datos para la nueva clave a generarse: Aquí se asignan los datos que se utilizarán cuando se cree la nueva clave cuando el campo Paid sea igual a 'Y'.

Campo Users: Cantidad de usuarios que podrán registrarse utilizando la misma clave, uno como primario y el resto como usuarios secundarios. se puede asignar un número en el rango [1..254].

Campo Instances: Determina el número máximo de instancias que se podrán ejecutar en cada computador registrado.

Campo Values: Campo values de la clave a generar. Ya se explicó más arriba como utilizar este campo.

Campo Days: Campo days de la clave a generar. En claves temporales determina el periodo de días autorizados, el valor debe estar en el rango [1..65534]. Para claves permanentes se asigna automáticamente con 65535.

 

Botones operativos:

[Delete record]: Elimina el registro corriente. No habilitado en av-soft.com.

[Save Record]: Modifica los datos del registro con los datos ingresados en el formulario.

[Cancel]: Cierra el cuadro sin modificar el registro.

 

Como práctica con esta pantalla ingresemos los siguientes datos como se muestra en la imagen abajo:

 

editolm02

 

Después hacemos click sobre el botón [Save Record] y veremos el siguiente mensaje indicando que el registro ha sido modificado:

 

editolm03

 

Hacemos click en aceptar y volvemos a la pantalla del panel de control. Refresquemos la pantalla con el botón [->Go] del panel de control y veremos el registro modificado:

 

editolm04

 

Ahora podemos hacer click sobre el botón [Renew Registration] del formulario de registración

 

renew01

 

Esto va a generar y registrar una nueva clave, en el OLM y localmente. Vea abajo el mensaje recibido informando que la registración ha sido renovada:

 

demo01a11

 

y volviendo con [Continue >>] al formulario principal veremos los cambios realizados que dependen del campo Values:

 

demo06a07