Componentes.Terceros.RemObj.../internal/5.0.35.741/1/RemObjects SDK for Delphi/Samples/Message Envelopes/MessageEnvelopes_ClientMain.pas
2009-02-28 17:16:16 +00:00

229 lines
7.4 KiB
ObjectPascal

unit MessageEnvelopes_ClientMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel,
ToolWin, ComCtrls, CheckLst, ExtCtrls, ActnList, uROEncryptionEnvelope,
Spin;
type
TMessageEnvelopes_ClientMainForm = class(TForm)
ROMessage: TROBinMessage;
ROChannel: TROWinInetHTTPChannel;
RORemoteService: TRORemoteService;
ActionList1: TActionList;
aAdd: TAction;
aUpdate: TAction;
aDelete: TAction;
aMoveUp: TAction;
aMoveDown: TAction;
Panel1: TPanel;
bMoveDown: TButton;
bMoveUp: TButton;
bDelete: TButton;
bUpdate: TButton;
bAdd: TButton;
CheckListBox1: TCheckListBox;
Label1: TLabel;
Panel2: TPanel;
bClearLog: TButton;
Memo1: TMemo;
Panel3: TPanel;
Edit1: TEdit;
bTest: TButton;
bRandomTest: TButton;
SpinEdit1: TSpinEdit;
Label2: TLabel;
procedure bClearLogClick(Sender: TObject);
procedure aTestExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure aDeleteExecute(Sender: TObject);
procedure aDeleteUpdate(Sender: TObject);
procedure CheckListBox1ClickCheck(Sender: TObject);
procedure aMoveUpUpdate(Sender: TObject);
procedure aMoveUpExecute(Sender: TObject);
procedure aMoveDownExecute(Sender: TObject);
procedure aMoveDownUpdate(Sender: TObject);
procedure bAddClick(Sender: TObject);
procedure aUpdateExecute(Sender: TObject);
procedure bRandomTestClick(Sender: TObject);
private
{ Private declarations }
procedure Log(AStr: string);
procedure CreateAESEnvelope(AMarker, APass: String; AEnabled: Boolean);
procedure DoBeforeEnvelopeProcessed(
AMessageEnvelope: TROMessageEnvelope; AStream: TStream;
aMode: TROMessageEnvelopeMode; AMessage: IROMessage);
function GenerateString(AMessageEnvelope: TROAESEncryptionEnvelope): String;
public
{ Public declarations }
end;
var
MessageEnvelopes_ClientMainForm: TMessageEnvelopes_ClientMainForm;
implementation
uses MessageEnvelopesLibrary_Intf, MessageEnvelopes_AddEnvelope, Math;
{$R *.dfm}
procedure TMessageEnvelopes_ClientMainForm.bClearLogClick(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TMessageEnvelopes_ClientMainForm.aTestExecute(Sender: TObject);
begin
if (RORemoteService as IMessageEnvelopesService).Echo(Edit1.Text) = Edit1.Text then
Log('Echo is OK!');
end;
procedure TMessageEnvelopes_ClientMainForm.Log(AStr: string);
begin
Memo1.Lines.Add(AStr);
end;
procedure TMessageEnvelopes_ClientMainForm.FormCreate(Sender: TObject);
begin
CreateAESEnvelope('Marker A','Password A',True);
CheckListBox1.ItemIndex := 0;
CreateAESEnvelope('Marker B','Password B',False);
CreateAESEnvelope('Marker C','Password C',False);
end;
procedure TMessageEnvelopes_ClientMainForm.CreateAESEnvelope(AMarker, APass: String; AEnabled: Boolean);
var
lEnv: TROAESEncryptionEnvelope;
begin
lEnv := TROAESEncryptionEnvelope.Create(nil);
with lEnv do begin
Password := APass;
EnvelopeMarker := AMarker;
BeforeEnvelopeProcessed := DoBeforeEnvelopeProcessed;
end;
with TROMessageEnvelopeItem(ROMessage.Envelopes.Add) do begin
Envelope := lEnv;
Enabled := AEnabled;
end;
CheckListBox1.AddItem(GenerateString(lEnv),lEnv);
CheckListBox1.Checked[CheckListBox1.Count-1]:=AEnabled;
end;
procedure TMessageEnvelopes_ClientMainForm.aDeleteExecute(Sender: TObject);
var
lEnv: TROMessageEnvelope;
begin
lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]);
CheckListBox1.Items.Delete(CheckListBox1.ItemIndex);
ROMessage.Envelopes.Delete(ROMessage.Envelopes.ItemByEnvelope(lEnv).Index);
lEnv.Free;
end;
procedure TMessageEnvelopes_ClientMainForm.aDeleteUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := CheckListBox1.ItemIndex <> -1;
end;
procedure TMessageEnvelopes_ClientMainForm.CheckListBox1ClickCheck(Sender: TObject);
var
lEnv: TROMessageEnvelope;
begin
lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]);
ROMessage.Envelopes.ItemByEnvelope(lEnv).Enabled := CheckListBox1.Checked[CheckListBox1.ItemIndex];
end;
procedure TMessageEnvelopes_ClientMainForm.aMoveUpUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := (CheckListBox1.ItemIndex > 0);
end;
procedure TMessageEnvelopes_ClientMainForm.aMoveUpExecute(Sender: TObject);
var
lEnv: TROMessageEnvelope;
begin
lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]);
with ROMessage.Envelopes.ItemByEnvelope(lEnv) do
Index := Index -1;
CheckListBox1.Items.Exchange(CheckListBox1.ItemIndex, CheckListBox1.ItemIndex-1);
end;
procedure TMessageEnvelopes_ClientMainForm.aMoveDownExecute(Sender: TObject);
var
lEnv: TROMessageEnvelope;
begin
lEnv := TROMessageEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]);
with ROMessage.Envelopes.ItemByEnvelope(lEnv) do
Index := Index +1;
CheckListBox1.Items.Exchange(CheckListBox1.ItemIndex, CheckListBox1.ItemIndex+1);
end;
procedure TMessageEnvelopes_ClientMainForm.aMoveDownUpdate(Sender: TObject);
begin
TAction(Sender).Enabled := (CheckListBox1.ItemIndex <> -1) and (CheckListBox1.ItemIndex <> CheckListBox1.Count-1);
end;
procedure TMessageEnvelopes_ClientMainForm.DoBeforeEnvelopeProcessed(
AMessageEnvelope: TROMessageEnvelope; AStream: TStream;
aMode: TROMessageEnvelopeMode; AMessage: IROMessage);
begin
case aMode of
memIncoming: Log(AMessageEnvelope.EnvelopeMarker+' : processing incoming message');
memOutgoing: Log(AMessageEnvelope.EnvelopeMarker+' : processing outgoing message');
end;
end;
procedure TMessageEnvelopes_ClientMainForm.bAddClick(Sender: TObject);
var
lMarker, lPassword: string;
begin
lMarker := 'Marker '+ inttoStr(CheckListBox1.Count+1);
lPassword := 'Password '+ inttoStr(CheckListBox1.Count+1);
if AddAESEnvelope(lMarker,lPassword) then
CreateAESEnvelope(lMarker,lPassword,True);
end;
procedure TMessageEnvelopes_ClientMainForm.aUpdateExecute(Sender: TObject);
var
lEnv: TROAESEncryptionEnvelope;
lMarker, lPassword: string;
begin
lEnv := TROAESEncryptionEnvelope(CheckListBox1.Items.Objects[CheckListBox1.ItemIndex]);
lMarker :=lEnv.EnvelopeMarker;
lPassword := lEnv.Password;
if UpdateAESEnvelope(lMarker,lPassword) then begin
lEnv.EnvelopeMarker := lMarker;
lEnv.Password := lPassword;
CheckListBox1.Items[CheckListBox1.ItemIndex] := GenerateString(lEnv);
end;
end;
procedure TMessageEnvelopes_ClientMainForm.bRandomTestClick(Sender: TObject);
var
i,j: integer;
begin
for j := 0 to SpinEdit1.Value -1 do begin
For i:= 0 to CheckListBox1.Count -1 do begin
CheckListBox1.Checked[i] := False;
ROMessage.Envelopes[i].Enabled := False;
end;
if CheckListBox1.Count > 0 then begin
i := RandomRange(0, CheckListBox1.Count-1);
CheckListBox1.Checked[i] := True;
ROMessage.Envelopes[i].Enabled := True;
aTestExecute(bTest);
end;
end;
end;
function TMessageEnvelopes_ClientMainForm.GenerateString(
AMessageEnvelope: TROAESEncryptionEnvelope): String;
begin
Result := AMessageEnvelope.EnvelopeMarker + ' [ password = ''' + AMessageEnvelope.Password+''' ]'
end;
end.