|
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

|
Esquema E

|
Esquema F

|
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)

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

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":
Además podrá ver que el estado corriente de registración ha cambiado mostrando el mensaje que puede ver abajo:

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:

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:

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]:

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:

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

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:

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

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:

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

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:

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

|