Componentes.Terceros.RemObj.../internal/6.0.43.801/1/RemObjects Samples/RemObjects SDK for Delphi/Super TCP Channel Chat/SyncServerLibrary_Intf.pas

674 lines
20 KiB
ObjectPascal
Raw Normal View History

unit SyncServerLibrary_Intf;
{----------------------------------------------------------------------------}
{ This unit was automatically generated by the RemObjects SDK after reading }
{ the RODL file associated with this project . }
{ }
{ Do not modify this unit manually, or your changes will be lost when this }
{ unit is regenerated the next time you compile the project. }
{----------------------------------------------------------------------------}
{$I RemObjects.inc}
interface
uses
{vcl:} Classes, TypInfo,
{RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf;
const
{ Library ID }
LibraryUID = '{C04AE0F2-540E-434F-96FA-08B8A7810005}';
TargetNamespace = '';
{ Service Interface ID's }
ISyncServerService_IID : TGUID = '{7941D2C3-63AE-4559-BB62-3443C5B3EB3F}';
IPairingService_IID : TGUID = '{CBA27400-AE3F-4945-8520-0EA97EC5DE41}';
{ Event ID's }
type
TSeekOrigin = Classes.TSeekOrigin; // fake declaration
{ Forward declarations }
ISyncServerService = interface;
IPairingService = interface;
FileInfoArray = class;
FileInfoStruct = class;
FileTransferException = class;
{ Enumerateds }
PairingStatus = (PairingStatus_Successfull,PairingStatus_PairingRequired,PairingStatus_PairingBusy);
{ FileInfoStruct }
FileInfoStruct = class(TROComplexType)
private
fName: AnsiString;
fDate: DateTime;
fFileSize: Integer;
public
procedure Assign(iSource: TPersistent); override;
procedure ReadComplex(ASerializer: TObject); override;
procedure WriteComplex(ASerializer: TObject); override;
published
property Name:AnsiString read fName write fName;
property Date:DateTime read fDate write fDate;
property FileSize:Integer read fFileSize write fFileSize;
end;
{ FileInfoStructCollection }
FileInfoStructCollection = class(TROCollection)
protected
constructor Create(aItemClass: TCollectionItemClass); overload;
function GetItems(aIndex: integer): FileInfoStruct;
procedure SetItems(aIndex: integer; const Value: FileInfoStruct);
public
constructor Create; overload;
function Add: FileInfoStruct; reintroduce;
procedure SaveToArray(anArray: FileInfoArray);
procedure LoadFromArray(anArray: FileInfoArray);
property Items[Index: integer]:FileInfoStruct read GetItems write SetItems; default;
end;
{ FileInfoArray }
FileInfoArray_FileInfoStruct = array of FileInfoStruct;
FileInfoArray = class(TROArray)
private
fCount: Integer;
fItems : FileInfoArray_FileInfoStruct;
protected
procedure Grow; virtual;
function GetItems(aIndex: integer): FileInfoStruct;
procedure SetItems(aIndex: integer; const Value: FileInfoStruct);
function GetCount: integer; override;
public
class function GetItemType: PTypeInfo; override;
class function GetItemClass: TClass; override;
class function GetItemSize: integer; override;
function GetItemRef(aIndex: integer): pointer; override;
procedure SetItemRef(aIndex: integer; Ref: pointer); override;
procedure Clear; override;
procedure Delete(aIndex: integer); override;
procedure Resize(ElementCount: integer); override;
procedure Assign(iSource:TPersistent); override;
procedure ReadComplex(ASerializer: TObject); override;
procedure WriteComplex(ASerializer: TObject); override;
function Add: FileInfoStruct; overload;
function Add(const Value: FileInfoStruct):integer; overload;
property Count : integer read GetCount;
property Items[Index: integer]:FileInfoStruct read GetItems write SetItems; default;
property InnerArray: FileInfoArray_FileInfoStruct read fItems;
end;
{ Exceptions }
FileTransferException = class(EROException)
private
fFileName: AnsiString;
fMessage: AnsiString;
public
constructor Create(anExceptionMessage : string; aFileName: AnsiString; aMessage: AnsiString);
procedure ReadException(ASerializer: TObject); override;
procedure WriteException(ASerializer: TObject); override;
published
property FileName: AnsiString read fFileName write fFileName;
property Message: AnsiString read fMessage write fMessage;
end;
{ ISyncServerService }
ISyncServerService = interface
['{7941D2C3-63AE-4559-BB62-3443C5B3EB3F}']
function GetRemoteFiles: FileInfoArray;
function DeclareLocalFiles(const FilesList: FileInfoArray): FileInfoArray;
procedure SetChunkSize(const Size: Integer);
function GetFile(const FileName: AnsiString; const ChunkNo: Integer): Binary;
procedure SendFile(const FileName: AnsiString; const ChunkNo: Integer; const FileData: Binary);
end;
{ CoSyncServerService }
CoSyncServerService = class
class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISyncServerService;
end;
{ TSyncServerService_Proxy }
TSyncServerService_Proxy = class(TROProxy, ISyncServerService)
protected
function __GetInterfaceName:string; override;
function GetRemoteFiles: FileInfoArray;
function DeclareLocalFiles(const FilesList: FileInfoArray): FileInfoArray;
procedure SetChunkSize(const Size: Integer);
function GetFile(const FileName: AnsiString; const ChunkNo: Integer): Binary;
procedure SendFile(const FileName: AnsiString; const ChunkNo: Integer; const FileData: Binary);
end;
{ IPairingService }
IPairingService = interface
['{CBA27400-AE3F-4945-8520-0EA97EC5DE41}']
function LoginAttempt(const ClientGuid: Guid): Integer;
function ConfirmCode(const Code: AnsiString; const ClientGuid: Guid): Boolean;
end;
{ CoPairingService }
CoPairingService = class
class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IPairingService;
end;
{ TPairingService_Proxy }
TPairingService_Proxy = class(TROProxy, IPairingService)
protected
function __GetInterfaceName:string; override;
function LoginAttempt(const ClientGuid: Guid): Integer;
function ConfirmCode(const Code: AnsiString; const ClientGuid: Guid): Boolean;
end;
implementation
uses
{vcl:} SysUtils,
{RemObjects:} uROEventRepository, uROSerializer, uRORes;
{ FileTransferException }
constructor FileTransferException.Create(anExceptionMessage : string; aFileName: AnsiString;
aMessage: AnsiString);
begin
inherited Create(anExceptionMessage);
fFileName := aFileName;
fMessage := aMessage;
end;
procedure FileTransferException.ReadException(ASerializer: TObject);
var
l_FileName: AnsiString;
l_Message: AnsiString;
begin
if TROSerializer(ASerializer).RecordStrictOrder then begin
l_FileName := FileName;
TROSerializer(ASerializer).ReadAnsiString('FileName', l_FileName);
FileName := l_FileName;
l_Message := Message;
TROSerializer(ASerializer).ReadAnsiString('Message', l_Message);
Message := l_Message;
end
else begin
l_FileName := FileName;
TROSerializer(ASerializer).ReadAnsiString('FileName', l_FileName);
FileName := l_FileName;
l_Message := Message;
TROSerializer(ASerializer).ReadAnsiString('Message', l_Message);
Message := l_Message;
end;
end;
procedure FileTransferException.WriteException(ASerializer: TObject);
var
l_FileName: AnsiString;
l_Message: AnsiString;
begin
if TROSerializer(ASerializer).RecordStrictOrder then begin
TROSerializer(ASerializer).ChangeClass(FileTransferException);
l_FileName := FileName;
TROSerializer(ASerializer).WriteAnsiString('FileName', l_FileName);
l_Message := Message;
TROSerializer(ASerializer).WriteAnsiString('Message', l_Message);
end
else begin
l_FileName := FileName;
TROSerializer(ASerializer).WriteAnsiString('FileName', l_FileName);
l_Message := Message;
TROSerializer(ASerializer).WriteAnsiString('Message', l_Message);
end;
end;
{ FileInfoArray }
procedure FileInfoArray.Assign(iSource: TPersistent);
var lSource:FileInfoArray;
i:integer;
lItem:FileInfoStruct;
begin
if (iSource is FileInfoArray) then begin
lSource := FileInfoArray(iSource);
Clear();
for i := 0 to lSource.Count-1 do
if Assigned(lSource.Items[i]) then begin
lItem := FileInfoStruct(lSource.Items[i].ClassType.Create);
lItem.Assign(lSource.Items[i]);
Add(lItem);
end
else begin
Add(nil);
end;
end
else begin
inherited Assign(iSource);
end;
end;
class function FileInfoArray.GetItemType: PTypeInfo;
begin
result := TypeInfo(FileInfoStruct);
end;
class function FileInfoArray.GetItemClass: TClass;
begin
result := FileInfoStruct;
end;
class function FileInfoArray.GetItemSize: integer;
begin
result := SizeOf(FileInfoStruct);
end;
function FileInfoArray.GetItems(aIndex: integer): FileInfoStruct;
begin
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
result := fItems[aIndex];
end;
function FileInfoArray.GetItemRef(aIndex: integer): pointer;
begin
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
result := fItems[aIndex];
end;
procedure FileInfoArray.SetItemRef(aIndex: integer; Ref: pointer);
begin
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
if Ref <> fItems[aIndex] then begin
if fItems[aIndex] <> nil then fItems[aIndex].Free;
fItems[aIndex] := Ref;
end;
end;
procedure FileInfoArray.Clear;
var i: integer;
begin
for i := 0 to (Count-1) do fItems[i].Free();
SetLength(fItems, 0);
FCount := 0;
end;
procedure FileInfoArray.Delete(aIndex: integer);
var i: integer;
begin
if (aIndex>=Count) then RaiseError(err_InvalidIndex, [aIndex]);
fItems[aIndex].Free();
if (aIndex<Count-1) then
for i := aIndex to Count-2 do fItems[i] := fItems[i+1];
SetLength(fItems, Count-1);
Dec(FCount);
end;
procedure FileInfoArray.SetItems(aIndex: integer; const Value: FileInfoStruct);
begin
if (aIndex < 0) or (aIndex >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[aIndex]);
if fItems[aIndex] <> Value then begin
fItems[aIndex].Free;
fItems[aIndex] := Value;
end;
end;
procedure FileInfoArray.Resize(ElementCount: integer);
var i: Integer;
begin
if fCount = ElementCount then Exit;
for i := FCount -1 downto ElementCount do
FItems[i].Free;
SetLength(fItems, ElementCount);
for i := FCount to ElementCount -1 do
FItems[i] := FileInfoStruct.Create;
FCount := ElementCount;
end;
function FileInfoArray.GetCount: integer;
begin
result := FCount;
end;
procedure FileInfoArray.Grow;
var
Delta, Capacity: Integer;
begin
Capacity := Length(fItems);
if Capacity > 64 then
Delta := Capacity div 4
else
if Capacity > 8 then
Delta := 16
else
Delta := 4;
SetLength(fItems, Capacity + Delta);
end;
function FileInfoArray.Add: FileInfoStruct;
begin
result := FileInfoStruct.Create;
Add(Result);
end;
function FileInfoArray.Add(const Value:FileInfoStruct): integer;
begin
Result := Count;
if Length(fItems) = Result then
Grow;
fItems[result] := Value;
Inc(fCount);
end;
procedure FileInfoArray.ReadComplex(ASerializer: TObject);
var
lval: FileInfoStruct;
i: integer;
begin
for i := 0 to Count-1 do begin
with TROSerializer(ASerializer) do begin
ReadStruct(GetArrayElementName(GetItemType, GetItemRef(i)), FileInfoStruct, lval, i);
end;
Items[i] := lval;
end;
end;
procedure FileInfoArray.WriteComplex(ASerializer: TObject);
var
i: integer;
begin
for i := 0 to Count-1 do
with TROSerializer(ASerializer) do
WriteStruct(GetArrayElementName(GetItemType, GetItemRef(i)), fItems[i], FileInfoStruct, i);
end;
{ FileInfoStruct }
procedure FileInfoStruct.Assign(iSource: TPersistent);
var lSource: SyncServerLibrary_Intf.FileInfoStruct;
begin
inherited Assign(iSource);
if (iSource is SyncServerLibrary_Intf.FileInfoStruct) then begin
lSource := SyncServerLibrary_Intf.FileInfoStruct(iSource);
Name := lSource.Name;
Date := lSource.Date;
FileSize := lSource.FileSize;
end;
end;
procedure FileInfoStruct.ReadComplex(ASerializer: TObject);
var
l_Date: DateTime;
l_FileSize: Integer;
l_Name: AnsiString;
begin
if TROSerializer(ASerializer).RecordStrictOrder then begin
l_Name := Name;
TROSerializer(ASerializer).ReadAnsiString('Name', l_Name);
Name := l_Name;
l_Date := Date;
TROSerializer(ASerializer).ReadDateTime('Date', l_Date);
Date := l_Date;
l_FileSize := FileSize;
TROSerializer(ASerializer).ReadInteger('FileSize', otSLong, l_FileSize);
FileSize := l_FileSize;
end
else begin
l_Date := Date;
TROSerializer(ASerializer).ReadDateTime('Date', l_Date);
Date := l_Date;
l_FileSize := FileSize;
TROSerializer(ASerializer).ReadInteger('FileSize', otSLong, l_FileSize);
FileSize := l_FileSize;
l_Name := Name;
TROSerializer(ASerializer).ReadAnsiString('Name', l_Name);
Name := l_Name;
end;
end;
procedure FileInfoStruct.WriteComplex(ASerializer: TObject);
var
l_Date: DateTime;
l_FileSize: Integer;
l_Name: AnsiString;
begin
if TROSerializer(ASerializer).RecordStrictOrder then begin
TROSerializer(ASerializer).ChangeClass(FileInfoStruct);
l_Name := Name;
TROSerializer(ASerializer).WriteAnsiString('Name', l_Name);
l_Date := Date;
TROSerializer(ASerializer).WriteDateTime('Date', l_Date);
l_FileSize := FileSize;
TROSerializer(ASerializer).WriteInteger('FileSize', otSLong, l_FileSize);
end
else begin
l_Date := Date;
TROSerializer(ASerializer).WriteDateTime('Date', l_Date);
l_FileSize := FileSize;
TROSerializer(ASerializer).WriteInteger('FileSize', otSLong, l_FileSize);
l_Name := Name;
TROSerializer(ASerializer).WriteAnsiString('Name', l_Name);
end;
end;
{ FileInfoStructCollection }
constructor FileInfoStructCollection.Create;
begin
inherited Create(FileInfoStruct);
end;
constructor FileInfoStructCollection.Create(aItemClass: TCollectionItemClass);
begin
inherited Create(aItemClass);
end;
function FileInfoStructCollection.Add: FileInfoStruct;
begin
result := FileInfoStruct(inherited Add);
end;
function FileInfoStructCollection.GetItems(aIndex: integer): FileInfoStruct;
begin
result := FileInfoStruct(inherited Items[aIndex]);
end;
procedure FileInfoStructCollection.LoadFromArray(anArray: FileInfoArray);
var i : integer;
begin
Clear;
for i := 0 to (anArray.Count-1) do
anArray[i].Clone.Collection := Self;
end;
procedure FileInfoStructCollection.SaveToArray(anArray: FileInfoArray);
var i : integer;
begin
anArray.Clear;
for i := 0 to (Count-1) do begin
if Assigned(Items[i]) then
anArray.Add(FileInfoStruct(Items[i].Clone))
else
anArray.Add(nil);
end;
end;
procedure FileInfoStructCollection.SetItems(aIndex: integer; const Value: FileInfoStruct);
begin
FileInfoStruct(inherited Items[aIndex]).Assign(Value);
end;
{ CoSyncServerService }
class function CoSyncServerService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): ISyncServerService;
begin
result := TSyncServerService_Proxy.Create(aMessage, aTransportChannel);
end;
{ TSyncServerService_Proxy }
function TSyncServerService_Proxy.__GetInterfaceName:string;
begin
result := 'SyncServerService';
end;
function TSyncServerService_Proxy.GetRemoteFiles: FileInfoArray;
begin
try
result := nil;
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'GetRemoteFiles');
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(SyncServerLibrary_Intf.FileInfoArray), result, []);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
function TSyncServerService_Proxy.DeclareLocalFiles(const FilesList: FileInfoArray): FileInfoArray;
begin
try
result := nil;
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'DeclareLocalFiles');
__Message.Write('FilesList', TypeInfo(SyncServerLibrary_Intf.FileInfoArray), FilesList, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(SyncServerLibrary_Intf.FileInfoArray), result, []);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
procedure TSyncServerService_Proxy.SetChunkSize(const Size: Integer);
begin
try
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'SetChunkSize');
__Message.Write('Size', TypeInfo(Integer), Size, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
function TSyncServerService_Proxy.GetFile(const FileName: AnsiString; const ChunkNo: Integer): Binary;
begin
try
result := nil;
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'GetFile');
__Message.Write('FileName', TypeInfo(AnsiString), FileName, []);
__Message.Write('ChunkNo', TypeInfo(Integer), ChunkNo, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(Binary), result, []);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
procedure TSyncServerService_Proxy.SendFile(const FileName: AnsiString; const ChunkNo: Integer; const FileData: Binary);
begin
try
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'SendFile');
__Message.Write('FileName', TypeInfo(AnsiString), FileName, []);
__Message.Write('ChunkNo', TypeInfo(Integer), ChunkNo, []);
__Message.Write('FileData', TypeInfo(Binary), FileData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
{ CoPairingService }
class function CoPairingService.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IPairingService;
begin
result := TPairingService_Proxy.Create(aMessage, aTransportChannel);
end;
{ TPairingService_Proxy }
function TPairingService_Proxy.__GetInterfaceName:string;
begin
result := 'PairingService';
end;
function TPairingService_Proxy.LoginAttempt(const ClientGuid: Guid): Integer;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'LoginAttempt');
__Message.Write('ClientGuid', TypeInfo(Guid), ClientGuid, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(Integer), result, []);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
function TPairingService_Proxy.ConfirmCode(const Code: AnsiString; const ClientGuid: Guid): Boolean;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, 'SyncServerLibrary', __InterfaceName, 'ConfirmCode');
__Message.Write('Code', TypeInfo(AnsiString), Code, []);
__Message.Write('ClientGuid', TypeInfo(Guid), ClientGuid, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(Boolean), result, []);
finally
__Message.UnsetAttributes(__TransportChannel);
__Message.FreeStream;
end
end;
initialization
RegisterROClass(FileInfoStruct);
RegisterROClass(FileInfoArray);
RegisterExceptionClass(FileTransferException);
RegisterProxyClass(ISyncServerService_IID, TSyncServerService_Proxy);
RegisterProxyClass(IPairingService_IID, TPairingService_Proxy);
RegisterEnumMapping(TROEnumMapping.Create('PairingStatus', 'Successfull', 'Successfull'));
RegisterEnumMapping(TROEnumMapping.Create('PairingStatus', 'PairingRequired', 'PairingRequired'));
RegisterEnumMapping(TROEnumMapping.Create('PairingStatus', 'PairingBusy', 'PairingBusy'));
finalization
UnregisterROClass(FileInfoStruct);
UnregisterROClass(FileInfoArray);
UnregisterExceptionClass(FileTransferException);
UnregisterProxyClass(ISyncServerService_IID);
UnregisterProxyClass(IPairingService_IID);
UnRegisterEnumMappings();
end.