211 lines
6.4 KiB
ObjectPascal
211 lines
6.4 KiB
ObjectPascal
|
|
unit VariantsClientMain;
|
||
|
|
|
||
|
|
interface
|
||
|
|
|
||
|
|
uses
|
||
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
|
||
|
|
uROClient, uROClientIntf, uRORemoteService, uROBinMessage, uROWinInetHTTPChannel,
|
||
|
|
ExtCtrls, uROSOAPMessage, VariantsLibrary_Intf;
|
||
|
|
|
||
|
|
type
|
||
|
|
TVariantsClientMainForm = class(TForm)
|
||
|
|
BINMessage: TROBinMessage;
|
||
|
|
HTTPChannel: TROWinInetHTTPChannel;
|
||
|
|
RORemoteService: TRORemoteService;
|
||
|
|
TestButton: TButton;
|
||
|
|
Memo: TMemo;
|
||
|
|
SOAPMessage: TROSOAPMessage;
|
||
|
|
rgMessageType: TRadioGroup;
|
||
|
|
procedure TestButtonClick(Sender: TObject);
|
||
|
|
procedure FormCreate(Sender: TObject);
|
||
|
|
procedure rgMessageTypeClick(Sender: TObject);
|
||
|
|
private
|
||
|
|
fVariantsService: IVariantsService;
|
||
|
|
{ Private declarations }
|
||
|
|
public
|
||
|
|
{ Public declarations }
|
||
|
|
end;
|
||
|
|
|
||
|
|
var
|
||
|
|
VariantsClientMainForm: TVariantsClientMainForm;
|
||
|
|
|
||
|
|
implementation
|
||
|
|
|
||
|
|
uses Variants;
|
||
|
|
|
||
|
|
{$R *.dfm}
|
||
|
|
|
||
|
|
procedure TVariantsClientMainForm.TestButtonClick(Sender: TObject);
|
||
|
|
|
||
|
|
procedure CheckVariants(const InputVariant, OutputVariant: Variant; CheckType: boolean = TRUE);
|
||
|
|
var
|
||
|
|
v1, v2: integer;
|
||
|
|
begin
|
||
|
|
if (InputVariant <> OutputVariant) then
|
||
|
|
raise Exception.Create('Variants differ!');
|
||
|
|
{ if CheckType then begin
|
||
|
|
v1 := VarType(InputVariant);
|
||
|
|
v2 := VarType(OutputVariant);
|
||
|
|
if v1<>v2 then
|
||
|
|
raise Exception.CreateFmt('Variant TYPE is different (%d, %d)!', [v1, v2]);
|
||
|
|
end;}
|
||
|
|
end;
|
||
|
|
|
||
|
|
var
|
||
|
|
inputvar, outputvar: Variant;
|
||
|
|
i: integer;
|
||
|
|
incomplex, outcomplex: TComplexObject;
|
||
|
|
inarray, outarray: TVariantArray;
|
||
|
|
begin
|
||
|
|
|
||
|
|
// Complex object
|
||
|
|
incomplex := TComplexObject.Create;
|
||
|
|
incomplex.IntegerId := 101;
|
||
|
|
incomplex.VariantValue := 'My Variant';
|
||
|
|
fVariantsService.EchoComplexObject(incomplex, outcomplex);
|
||
|
|
Memo.Lines.Add('Received ' + IntToStr(outcomplex.IntegerId) + ', ' + outcomplex.VariantValue);
|
||
|
|
incomplex.Free;
|
||
|
|
outcomplex.Free;
|
||
|
|
|
||
|
|
// Simple variant array
|
||
|
|
if not (RORemoteService.Message is TROSOAPMessage) then begin
|
||
|
|
inputvar := VarArrayCreate([0, 10], varVariant);
|
||
|
|
i := 0;
|
||
|
|
for i := 0 to 10 do inputvar[i] := 'SomeText';
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
|
||
|
|
for i := 0 to VarArrayHighBound(outputvar, 1) do
|
||
|
|
Memo.Lines.Add('Simple variant array item #' + IntToStr(i) + '=' + VarToStr(outputvar[i]));
|
||
|
|
end;
|
||
|
|
|
||
|
|
// Variant array (complex type)
|
||
|
|
inarray := TVariantArray.Create;
|
||
|
|
inarray.Add('A string');
|
||
|
|
inarray.Add(1);
|
||
|
|
inarray.Add(Now);
|
||
|
|
inarray.Add(True);
|
||
|
|
fVariantsService.EchoVariantArray(inarray, outarray);
|
||
|
|
for i := 0 to outarray.Count - 1 do
|
||
|
|
Memo.Lines.Add('Variant array item #' + IntToStr(i) + '=' + VarToStr(outarray[i]));
|
||
|
|
inarray.Free;
|
||
|
|
outarray.Free;
|
||
|
|
Memo.Lines.Add('');
|
||
|
|
|
||
|
|
// String
|
||
|
|
inputvar := 'Test';
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Shortint
|
||
|
|
inputvar := 12;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Byte
|
||
|
|
inputvar := 200;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Integer
|
||
|
|
inputvar := 123456;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Float
|
||
|
|
inputvar := 22.39;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar, FALSE);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Float (big one)
|
||
|
|
inputvar := 780000.32;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar, FALSE);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Shortint
|
||
|
|
inputvar := -12;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Byte
|
||
|
|
inputvar := -200;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Integer
|
||
|
|
inputvar := -123456;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Float
|
||
|
|
inputvar := -22.39;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar, FALSE);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Float (big one)
|
||
|
|
inputvar := -780000.32;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar, FALSE);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Datetime
|
||
|
|
inputvar := Now;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
// CheckVariants(inputvar, outputvar); // For some reason 2 equal datetimes seem different to Delphi (using SOAP)
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
// Boolean
|
||
|
|
inputvar := true;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
CheckVariants(inputvar, outputvar);
|
||
|
|
Memo.Lines.Add('Received ' + VarToStr(outputvar));
|
||
|
|
|
||
|
|
if (RORemoteService.Message is TROSOAPMessage) then Exit;
|
||
|
|
|
||
|
|
// Array
|
||
|
|
Memo.Lines.Add('');
|
||
|
|
inputvar := VarArrayCreate([0, 3], varVariant);
|
||
|
|
inputvar[0] := 1;
|
||
|
|
inputvar[1] := 1234.5678;
|
||
|
|
inputvar[2] := 'Hello world';
|
||
|
|
inputvar[3] := True;
|
||
|
|
fVariantsService.EchoVariant(inputvar, outputvar);
|
||
|
|
|
||
|
|
for i := 0 to VarArrayHighBound(outputvar, 1) do
|
||
|
|
Memo.Lines.Add('Array element #' + IntToStr(i) + ': ' + VarToStr(outputvar[i]));
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TVariantsClientMainForm.FormCreate(Sender: TObject);
|
||
|
|
var
|
||
|
|
i: integer;
|
||
|
|
begin
|
||
|
|
for i := 0 to ComponentCount - 1 do
|
||
|
|
if (Components[i] is TROMessage) then begin
|
||
|
|
rgMessageType.Items.AddObject(TROMessage(Components[i]).Name, Components[i]);
|
||
|
|
end;
|
||
|
|
|
||
|
|
rgMessageType.ItemIndex := 1;
|
||
|
|
FVariantsService := (RORemoteService as IVariantsService);
|
||
|
|
end;
|
||
|
|
|
||
|
|
procedure TVariantsClientMainForm.rgMessageTypeClick(Sender: TObject);
|
||
|
|
begin
|
||
|
|
RORemoteService.Message := TROMessage(rgMessageType.Items.Objects[rgMessageType.ItemIndex]);
|
||
|
|
FVariantsService := (RORemoteService as IVariantsService);
|
||
|
|
|
||
|
|
if (RORemoteService.Message is TROSOAPMessage) then HTTPChannel.TargetURL := 'http://localhost:8099/SOAP'
|
||
|
|
else HTTPChannel.TargetURL := 'http://localhost:8099/BIN';
|
||
|
|
end;
|
||
|
|
|
||
|
|
end.
|
||
|
|
|