|
EJEMPLO 8 (Demo1)
Items
Lista de funciones usadas en este ejemplo
En este ejemplo aprenderá a
Esquemas de protección
Diagrama de flujo
Obtener el estado de registración
Valores por defecto de las propiedades
Breve práctica con el ejemplo 8
Lista de funciones usadas en este ejemplo:
Este ejemplo es un compendium de todas las funcionalidades del componente. Es una adaptación del Demo1 de la version anterior 3.2. Vea el siguiente cuadro con la lista de métodos utilizados en el ejemplo:
Features
|
Description
|
Basic OLM
|
|
OnlineGetKeyB()
|
Start the trial period or restore it
|
OnlineCheckDate()
|
Check Online the local system date
|
Advanced OLM
|
|
OnlineStartTrial()
|
Start the trial period or restore it
|
OnlineExtendTrial()
|
Extend the trial period
|
OnlineRegisterKey()
|
Register a given Registration Key
|
OnlineRenew()
|
Only if (Paid=Y). Generates and applies a new registration key according with the online OLM data
|
OnLineSynch()
|
Synchronize the local registration data from the OLM
|
OnLineStartSecondary()
|
Secondary Registration: Generates a secondary record into the OLM and link it to a existing primary record
|
OnLineMovePrimary1()
|
Move Primary Step1: Must be executed from the old computer. Deactivates the primary record and all linked secondaries
|
OnLineMovePrimary2()
|
Move Primary Step2: Must be executed from the new computer. Reactivates the primary record and all linked secondaries
|
OnLineRestorePrimary()
|
Undo the action performed by the Step1. Only possible before to apply the Step2
|
OnLineMoveSecondary1()
|
Move Secondary Step1: Must be executed from the old computer. Deactivates the secondary record
|
OnLineMoveSecondary2()
|
Move Secondary Step2: Must be executed from the new computer. Reactivates the secondary record
|
OnLineRestoreSecondary()
|
Undo the action performed by the Step1. Only possible before to apply the Step2
|
OnLineRemoveReg()
|
Remove the local registration data and the associated records from the OLM
|
OnlineFullSynch()
|
Used to automate all basic steps namely; Start trial, Extend trial, Renew licence and Synchronize
|
Other
|
|
GetModule()
|
Read the local registration data for the given module
|
RegisterKey()
|
Register Key Offline (local registration only)
|
MakeTrial()
|
Start locally the trial period based in the current system date. Not recommended
|
En este ejemplo aprenderá a:
1. Guardar los datos del usuario (Nombre, Compañía y Email), localmente en su computador y en el OLM en su servidor web.
2. Manejar licencias primarias y secundarias.
3. Mover licencias de un computador a otro.
Esquemas de protección
Este ejemplo implementa los esquemas D y F
Esquema D

|
Esquema F

|
Con el ejemplo Demo1 mostramos la mayoría de las funcionalidades que brinda AVLock SIMPLE para que Ud. pueda implementar todos los pasos necesarios durante todo el ciclo de vida de su aplicación. Aquí mostramos todas las posibilidades, pero cuando Ud. utilice solo las que considere convenientes. Con este ejemplo pretendemos que Ud. comprenda como funciona el componente y los diferentes métodos y medidas de seguridad que puede aplicar para proteger su aplicación.
Y los implementa como se muestra en el siguiente diagrama de flujo:
Diagrama de flujo

|
procedure TForm1.FormCreate(Sender: TObject);
begin
DoRegister(False);
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;
if (keydata.Status = Registered)
then begin
BtnRestricted.Enabled := (IsValueOn(keydata.Values,1,0));
BtnSpecial.Enabled := (IsValueOn(keydata.Values,1,1));
end;
lappname.caption:= AVLockS41.AppName;
lusername.caption:= AVLockS41.UserName;
lappversion.caption:= AVLockS41.AppVersion;
lcompany.caption:= AVLockS41.Company;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
showabout(true);
end;
|
Obtener el estado de registración
El método GetRegStatus de la unidad Regist permite obtener el estado actual de registración del componente. Abajo puede ver su código fuente. Lo primero que se hace es asignar las propiedades del componente, este tiene valores por omisión preestablecidos (puede verlos en una tabla abajo. Solo sería necesario asignar los valores que no coinciden con los preestablecidos, en nuestro caso solo cambiamos el valor del AppID por lo que podríamos haber asignado solo esa propiedad, igualmente, para que el ejemplo sea más completo también asignamos el resto de las propiedades.
Allí utilizamos el método GetKeyData de AVLock para leer los datos de registración locales y asignarlos al registro 'keydata' de tipo TKeyData definido en las sección "public" de la unidad.
Después se asigna el cuadro de edición EdIcode con el Installcode obtenido de la máquina y seguidamente en una estructura case se prepara el mensaje del estado de registración a mostrarse en la parte superior del formulario de registración y se lo asigna al caption del label lstatus.
Este método GetRegStatus es llamado con el evento OnCreate y al final de cada sección de código que haga cambios en el estado de registración, como ser en BtnRegClick(), BtnRemoveClick(), BtnTrialClick() y BtnTrialOlmClick().
procedure TRegForm.GetRegStatus;
var s, regdata:string;
recordexists:boolean;
begin
//Set properties
AVLock:= Form1.AVLockS41;
with AVLock do begin
EncryptionKey := 'abc123';
AppID := 12341; //default: 12345
RemovableDisk := False;
AppName := 'MyApp';
AppVersion := '1.0.0';
WebHost := 'www.av-soft.com';
InstancesCtrl := True;
RegPath := Other;
RegFolder := '';
OlmPath := '/olm4'; //default: '/olm3'
OlmBasicScript := 'basicolm.php';
OlmAdvScript := 'advancedolm.php';
V32Compat := False;
end;
AVLock.GetKeyData(0,keydata);
EdIcode.Text := AVLock.InstallCode;
EdName.Text := AVLock.UserName;
EdCompany.Text := AVLock.Company;
EdEmail.Text := AVLock.Email;
s:='';
case keydata.Status of
Unregistered: s:='Not registered';
Moved : s:='Moved to another computer';
Expired : s:='Expired';
Registered : begin
s:='Registered ';
if keydata.Primary then s:=s+'as primary '
else s:=s+'as secondary ';
case keydata.KeyType of
Trial : s:=s+inttostr(keydata.Days)+' days trial - '+inttostr(keydata.DaysLeft)+' days left.';
Temporal : s:=s+inttostr(keydata.Days)+' days license - '+inttostr(keydata.DaysLeft)+' days left.';
Permanent : s:=s+'(Permanent no time limit)';
end;
end;
end;
lstatus.caption:=s;
end;
KeyData es un registro de tipo TKeyData declarado en el componente (unit AVLockS4.pas) como sigue:
TKeyData = record
Status : TRegStatus;
KeyType : TKeyType;
Startdate : TDate;
EndDate : TDate;
Days : word;
DaysLeft : word;
Users : byte;
Instances : byte;
Primary : boolean;
DateBacked : boolean;
TooManyInstances : boolean;
Values : string;
Key : string;
//For secondary registrations
ICodeP : string;
InstallCodep : string;
end;
Valores por defecto de las propiedades
El componente inicializa sus propiedades con los siguientes valores:
Propiedades
|
Valores por omision
|
Detalle
|
EncryptionKey
|
'abc123'
|
Clave de encriptación usada para las claves y demás datos de registración.
|
EncryptionKey2
|
'xyz321'
|
Clave de encriptación usada para encriptar los datos que se envían y reciben del sitio web.
|
AppID
|
12345
|
Numero identificador de la aplicación.
|
RemovableDisk
|
False
|
Hacer True para aplicaciones portables.
|
AppName
|
'MyApp'
|
Nombre de la aplicación.
|
AppVersion
|
'1.0.0'
|
Versión de la aplicación.
|
WebHost
|
'www.av-soft.com'
|
url del sitio web donde se instaló el OLM.
|
InstancesCtrl
|
False
|
Si es True se controla el numero de instancias ejecutadas simultaneamente.
|
RegPath
|
CommonDocuments
|
Ubicación dentro del disco local donde se guardan los datos de registración.
|
RegFolder
|
'avlocks4'
|
Nombre de la carpeta donde se guardarán los datos de registración.
|
OlmPath
|
'/olm4'
|
Ubicación dentro del hosting donde se instaló el OLM.
|
OlmBasicScript
|
'basicolm.php'
|
Nombre del script administrador de claves del OLM básico.
|
OlmAdvScript
|
'advancedolm.php'
|
Nombre del script administrador de claves del OLM avanzado.
|
V32Compat
|
False
|
Compatibilidad con versiones anteriores 3.x. True para actualizar una aplicación existente sin que sus usuarios registrados tengan que registrarse de nuevo. Se mantendrá el mismo Installcode que en la versión anterior.
|
|
|
|
Antes de utilizar el componente se deben asignar las propiedades de acuerdo a su propia configuración. Solo necesitará asignar aquellas que sean distintas a las que vienen asignadas por defecto, al menos debería asignar con valores distintos las siguientes propiedades: EncryptionKey, EncryptionKey2 y AppID, y si tiene instalado el OLM en su propio servidor también las propiedades WebHost, y OlmPath.
Breve práctica con el ejemplo 8
Desde el IDE de Delphi Abra el ejemplo 8 (\Examples\8)

Ejecutar la aplicación
Presione el botón o F9 para iniciar la ejecución del programa. En unos instantes podrá ver el AboutBox mostrado como splash screen:

Este cuadro es llamado desde el evento OnShow como se ve abajo:
showabout(True); //show the about box as splash screen
Esta función puede ser llamada con dos propósitos distintos 1) Como splash screen cuando la aplicación se inicia (este caso) y para llamarla desde un botón dentro de la aplicación para ver el estado actual de registración. Vea su aspecto en la siguiente imagen:
Esta función showabout() se encuentra dentro de la unidad unit1.pas, vea abajo su codigo fuente.
procedure TForm1.showabout(assplash:boolean);
var Ab : TFAbout;
begin
Ab:=TFAbout.Create(nil);
try
Ab.LStatus.Caption := Status;
Ab.LTooMany.Caption := TooMany;
if reg0_ok then Ab.lreg.caption:='Registered to: '+lusername.Caption
else Ab.lreg.caption:='';
if assplash then Ab.tag:=0
else Ab.tag:=1;
Ab.showmodal;
finally
freeandnil(Ab);
end;
end;
Muy simple, este solo crea el form Ab, asigna los valores de los labels LStatus, LTooMany y LRreg, después
asigna la propiedad tag (0/1) según sea el parámetro assplash pasado, luego muestra el form como modal y finalmente libera la variable Ab.
La siguiente imagen muestra su aspecto en tiempo de diseño:

Esperando algunos segundos o presionando [Continue >>] pasamos a la pantalla principal de la aplicación.

Aquí podemos ver que dos de los botones no están habilitados;
[Restricted Features] y [Special Features]. Aquí, con una sola clave, utilizando el campo Values controlamos estos dos botones y también para controlar otras cosas. Para más información vea el tópico Claves de registración.
Visualice el Formulario de datos de registración (Main Form > [Registration] > [Show Registration Data]) abajo puede verlo:

Vemos que el estado es "Unregistered" por lo tanto, al no existir datos de registración el resto de los campos está marcado con "N/A".
A continuación cierre esta pantalla y haga click sobre el botón [Registration] y podrá ver el siguiente cuadro de dialogo:

Vemos el estado de registración y más abajo el "Install Code", un código único para cada computador calculado en base al hardware.
Si aún no está iniciado el periodo trial, con el botón [Start Trial] podemos iniciarlo. Hágalo y vea cómo se habilitan los botones en el form principal del programa:
Con el botón [About Box] podemos ver los cambios en el estado de registración:

Con el botón [Show Registration Data] volvamos a los datos de registración:

Vemos que ahora existen datos de registración. Al presionar el botón [Start Trial] se realizaron los pasos necesarios para crear y registrar una clave de registración de tipo trial, tanto en el OLM (web page) como localmente.
El código fuente que se ejecutó al presionar el botón [Start Trial] es el siguiente:
procedure TRegForm.BtnTrialOlmClick(Sender: TObject);
var s:string;
begin
if not testfields(False) then exit;
//assign username and company values to properties before register
writeData;
//Start Trial from the OLM
s:=AVLock.OnlineStartTrial(0,1,1,30,'390');
if (s='00') then begin
showmessage('Trial started or registration synchronized');
GetRegStatus;
end else showmessage(Error2Str(s));
end;
Para más información vea el apartado Como se inicia el periodo trial.
Los botones [Contact us] y [Send email] permiten al usuario comunicarse con Ud. a fin de concretar la operación de compra o cualquier otro tipo de consulta que este desee realizar. El "Install Code" es automáticamente incluido en los mensajes.
Una vez que el usuario realizó la compra y le ha enviado su "Install Code", Ud. está en condiciones de calcular la clave de registración que habilite el programa de acuerdo con lo pactado al realizar la compra.
Podemos utilizar la utilidad KeyGen o el RegMonitor para calcular la claves de registración que necesitamos. Probemos con la utilidad KeyGen.
Supongamos que su usuario pagó por una registración temporaria (usamos el módulo 0) para un usuario y dos instancias.


Entonces abramos la utilidad KeyGen.exe y entremos los valores correspondientes de AppID, Version, Encryption Key, Module, Users and Instances. Ingrese el InstallCode de la máquina del usuario, seleccione Temporary y asigne Authorized days = 95. Podrá ver la clave generada en el campo Registration Key. En un caso real debería enviar esta clave al usuario para que la registre en su computador pero como se trata de una prueba Ud. mismo la va a registrar en el Demo1, así que copiemos y peguemos la clave en el formulario de registración (abajo)

Presionamos el botón [Register Online] y obtenemos la confirmación de que se ha registrado la clave.

Haciendo click nuevamente sobre el botón [About Box] vemos el cambio realizado en la registración:

Con el botón [Show Registration Data] vea los nuevos datos de registración:

El codigo fuente del ejemplo 8 (Demo1)
Ud tiene el código fuente de este ejemplo Demo1. Está bien documentado y lo que hace cada función/Procedimiento es bastante obvio, sin embargo si hay algo que no entiende o necesita ser explicado en mayor detalle por favor queremos que nos lo haga saber.
|