Componentes.Terceros.RemObj.../internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnap_Intf.pas
david 2824855ea7 - Modificación del paquete RemObjects_Core_D10 para que sea un paquete de runtime/designtime (antes era designtime sólo)
- Recompilación en Delphi10 de todos los paquetes de RO para generar las DCU's en Lib\D10
- Recompilación en Delphi10 de todos los paquetes de DA para generar las DCU's en Lib\D10

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@9 b6239004-a887-0f4b-9937-50029ccdca16
2007-09-10 14:06:19 +00:00

320 lines
12 KiB
ObjectPascal

unit uRODataSnap_Intf;
interface
uses Classes, TypInfo, uROClient, uROTypes, uROClientIntf;
const
LibraryUID = '{9EC7C50C-DAC2-48A9-9A0F-CBAA29A11EF7}';
IAppServer_IID : TGUID = '{1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}';
type
{ Forward declarations }
IAppServer = interface;
TProviderNames = class;
{ TProviderNames }
TProviderNames = class(TROArray)
private
fItems : array of string;
protected
function GetItems(Index : integer) : string;
procedure SetItems(Index : integer; const Value : string);
function GetCount : integer; override;
public
class function GetItemType : PTypeInfo; override;
class function GetItemSize : integer; override;
function GetItemRef(Index : integer) : pointer; override;
procedure Clear; override;
procedure Delete(Index : integer); override;
procedure Resize(ElementCount : integer); override;
procedure Assign(iSource:TPersistent); override;
function Add(const Value:string):integer;
property Count : integer read GetCount;
property Items[Index : integer] : string read GetItems write SetItems; default;
end;
{ IAppServer }
IAppServer = interface
['{1AEFCC20-7A24-11D2-98B0-C69BEB4B5B6D}']
function AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary;
function AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary;
function AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary;
function AS_GetProviderNames: TProviderNames;
function AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary;
function AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary;
procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String);
end;
{ CoIAppServer }
CoAppServer = class
class function Create(const iAppServerName:string; const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IAppServer;
end;
TAppServer_Proxy = class(TROProxy, IAppServer)
private
fIAppServerName:string;
protected
constructor Create(const iAppServerName:string; const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); reintroduce; overload;
constructor Create(const aMessage : IROMessage; const aTransportChannel : IROTransportChannel); reintroduce; overload;
// Internal
function __GetInterfaceName:string; override;
// IAppServer
function AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary; virtual;
function AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary; virtual;
function AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary; virtual;
function AS_GetProviderNames: TProviderNames; virtual;
function AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary; virtual;
function AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary; virtual;
procedure AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String); virtual;
end;
implementation
uses
{vcl:} SysUtils,
{RemObjects:} uRORes, uROClasses;
{ TProviderNames }
procedure TProviderNames.Assign(iSource:TPersistent);
var lSource:TProviderNames;
i:integer;
begin
if (iSource is TProviderNames) then begin
lSource := TProviderNames(iSource);
Clear();
Resize(lSource.Count);
for i := 0 to Count-1 do begin
Items[i] := lSource.Items[i];
end;
end
else begin
inherited Assign(iSource);
end;
end;
class function TProviderNames.GetItemType : PTypeInfo;
begin
result := TypeInfo(string);
end;
class function TProviderNames.GetItemSize : integer;
begin
result := SizeOf(string);
end;
function TProviderNames.GetItems(Index : integer) : string;
begin
if (Index < 0) or (Index >= Count) then RaiseError(err_ArrayIndexOutOfBounds,[Index]);
result := fItems[Index];
end;
function TProviderNames.GetItemRef(Index : integer) : pointer;
begin
result := @fItems[Index];
end;
procedure TProviderNames.Clear;
begin
SetLength(fItems, 0);
end;
procedure TProviderNames.Delete(Index : integer);
var i : integer;
begin
if (Index>=Count) then RaiseError(err_InvalidIndex, [Index]);
if (Index<Count-1) then
for i := Index to Count-1 do fItems[i] := fItems[i+1];
SetLength(fItems, Count-1)
end;
procedure TProviderNames.SetItems(Index : integer; const Value : string);
begin
fItems[Index] := Value;
end;
procedure TProviderNames.Resize(ElementCount : integer);
begin
SetLength(fItems, ElementCount);
end;
function TProviderNames.GetCount: integer;
begin
result := Length(fItems);
end;
function TProviderNames.Add(const Value:string):integer;
begin
SetLength(fItems, Length(fItems)+1);
result := Length(fItems)-1;
fItems[result] := Value;
end;
{ CoIAppServer }
class function CoAppServer.Create(const iAppServerName:string; const aMessage : IROMessage; aTransportChannel : IROTransportChannel) : IAppServer;
begin
result := TAppServer_Proxy.Create(iAppServerName, aMessage, aTransportChannel);
end;
{ TAppServer_Proxy }
constructor TAppServer_Proxy.Create(const iAppServerName: string; const aMessage : IROMessage; const aTransportChannel : IROTransportChannel);
begin
inherited Create(aMessage,aTransportChannel);
fIAppServerName := iAppServerName;
end;
constructor TAppServer_Proxy.Create(const aMessage : IROMessage; const aTransportChannel : IROTransportChannel);
begin
Create('', aMessage, aTransportChannel);
end;
function TAppServer_Proxy.__GetInterfaceName: string;
begin
result := fIAppServerName;
end;
function TAppServer_Proxy.AS_ApplyUpdates(const ProviderName: WideString; const Delta: Binary; const MaxErrors: Integer; out ErrorCount: Integer; var OwnerData: String): binary;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_ApplyUpdates');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('Delta', TypeInfo(Binary), Delta, []);
__Message.Write('MaxErrors', TypeInfo(Integer), MaxErrors, []);
__Message.Write('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('ErrorCount', TypeInfo(Integer), ErrorCount, []);
__Message.Read('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Read('Result', TypeInfo(binary), result, []);
finally
__Message.FreeStream;
end
end;
function TAppServer_Proxy.AS_GetRecords(const ProviderName: WideString; const Count: Integer; out RecsOut: Integer; const Options: Integer; const CommandText: WideString; var Params: Binary; var OwnerData: String): binary;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_GetRecords');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('Count', TypeInfo(Integer), Count, []);
__Message.Write('Options', TypeInfo(Integer), Options, []);
__Message.Write('CommandText', TypeInfo(WideString), CommandText, []);
__Message.Write('Params', TypeInfo(Binary), Params, []);
__Message.Write('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('RecsOut', TypeInfo(Integer), RecsOut, []);
__Message.Read('Params', TypeInfo(Binary), Params, []);
__Message.Read('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Read('Result', TypeInfo(binary), result, []);
finally
__Message.FreeStream;
end
end;
function TAppServer_Proxy.AS_DataRequest(const ProviderName: WideString; const Data: Binary): binary;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_DataRequest');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('Data', TypeInfo(Binary), Data, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(binary), result, []);
finally
__Message.FreeStream;
end
end;
function TAppServer_Proxy.AS_GetProviderNames: TProviderNames;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_GetProviderNames');
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Result', TypeInfo(TProviderNames), result, []);
finally
__Message.FreeStream;
end
end;
function TAppServer_Proxy.AS_GetParams(const ProviderName: WideString; var OwnerData: String): binary;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_GetParams');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Read('Result', TypeInfo(binary), result, []);
finally
__Message.FreeStream;
end
end;
function TAppServer_Proxy.AS_RowRequest(const ProviderName: WideString; const Row: Binary; const RequestType: Integer; var OwnerData: String): binary;
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_RowRequest');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('Row', TypeInfo(Binary), Row, []);
__Message.Write('RequestType', TypeInfo(Integer), RequestType, []);
__Message.Write('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Read('Result', TypeInfo(binary), result, []);
finally
__Message.FreeStream;
end
end;
procedure TAppServer_Proxy.AS_Execute(const ProviderName: WideString; const CommandText: WideString; var Params: Binary; var OwnerData: String);
begin
try
__Message.InitializeRequestMessage(__TransportChannel, '', fIAppServerName, 'AS_Execute');
__Message.Write('ProviderName', TypeInfo(WideString), ProviderName, []);
__Message.Write('CommandText', TypeInfo(WideString), CommandText, []);
__Message.Write('Params', TypeInfo(Binary), Params, []);
__Message.Write('OwnerData', TypeInfo(String), OwnerData, []);
__Message.Finalize;
__TransportChannel.Dispatch(__Message);
__Message.Read('Params', TypeInfo(Binary), Params, []);
__Message.Read('OwnerData', TypeInfo(String), OwnerData, []);
finally
__Message.FreeStream;
end
end;
initialization
RegisterROClass(TProviderNames);
RegisterProxyClass(IAppServer_IID, TAppServer_Proxy);
finalization
UnregisterProxyClass(IAppServer_IID);
end.