Componentes.Terceros.RemObj.../internal/5.0.23.613/1/RemObjects SDK for Delphi/Samples/Variants/VariantsClientMain.pas

211 lines
6.4 KiB
ObjectPascal
Raw Normal View History

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.