- 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
113 lines
3.6 KiB
ObjectPascal
113 lines
3.6 KiB
ObjectPascal
unit uRODataSnapProviderPublisher;
|
|
|
|
interface
|
|
|
|
uses Classes, Provider,
|
|
uRODataSnap_Intf,
|
|
uRODataSnapPublishedProvidersCollection;
|
|
|
|
type TROCustomDataSnapProviderPublisher = class(TComponent)
|
|
private
|
|
fProviders: TPublishedProviders;
|
|
procedure SetProviders(const Value: TPublishedProviders);
|
|
protected
|
|
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
procedure AddNamesToTProviderNames(iProviderNames:TProviderNames);
|
|
function GetProviderByName(const iProviderName:string):TCustomProvider;
|
|
property Providers:TPublishedProviders read fProviders write SetProviders;
|
|
end;
|
|
|
|
TRODataSnapProviderPublisher = class(TROCustomDataSnapProviderPublisher)
|
|
published
|
|
property Providers;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils,
|
|
uROServer, uRODataSnapProviderManager, uRODataSnapBaseAppServer, uRODataSnap_Invk;
|
|
|
|
type TRODataSnapSimpleAppServer = class(TRODataSnapBaseAppServer)
|
|
function GetProviderByName(const iProviderName:string):TCustomProvider; override;
|
|
function GetProviderNames:TProviderNames; override;
|
|
end;
|
|
|
|
procedure Create_AppServer(out anInstance : IUnknown);
|
|
begin
|
|
anInstance := TRODataSnapSimpleAppServer.Create(nil);
|
|
end;
|
|
|
|
{ TROCustomDataSnapProviderPublisher }
|
|
|
|
procedure TROCustomDataSnapProviderPublisher.AddNamesToTProviderNames(iProviderNames: TProviderNames);
|
|
var i:integer;
|
|
begin
|
|
//ToDo: protect by CriticalSection;
|
|
|
|
for I := 0 to Providers.Count-1 do begin
|
|
if (Providers[i].Name <> '') and Assigned(Providers[i].Provider) then
|
|
iProviderNames.Add(Providers[i].Name);
|
|
end; { for }
|
|
end;
|
|
|
|
constructor TROCustomDataSnapProviderPublisher.Create(AOwner: TComponent);
|
|
begin
|
|
inherited;
|
|
fProviders := TPublishedProviders.Create(self);
|
|
ProviderManager.RegisterPublisher(self);
|
|
if not IsClassFactoryRegistered('IAppServer') then
|
|
TROClassFactory.Create('IAppServer', Create_AppServer, TAppServer_Invoker);
|
|
end;
|
|
|
|
destructor TROCustomDataSnapProviderPublisher.Destroy;
|
|
begin
|
|
ProviderManager.UnregisterPublisher(self);
|
|
FreeAndNil(fProviders);
|
|
inherited;
|
|
end;
|
|
|
|
function TROCustomDataSnapProviderPublisher.GetProviderByName(const iProviderName:string): TCustomProvider;
|
|
var lPublishedProvider:TPublishedProvider;
|
|
begin
|
|
//ToDo: protect by CriticalSection;
|
|
lPublishedProvider := fProviders.GetProviderByName(iProviderName);
|
|
if Assigned(lPublishedProvider) then result := lPublishedProvider.Provider
|
|
else result := nil;
|
|
end;
|
|
|
|
procedure TROCustomDataSnapProviderPublisher.Notification(
|
|
AComponent: TComponent; Operation: TOperation);
|
|
begin
|
|
inherited;
|
|
if Operation = opRemove then begin
|
|
if AComponent is TCustomProvider then Providers.UnlinkProvider(AComponent as TCustomProvider);
|
|
end;
|
|
end;
|
|
|
|
procedure TROCustomDataSnapProviderPublisher.SetProviders(
|
|
const Value: TPublishedProviders);
|
|
begin
|
|
fProviders.Assign(Value);
|
|
end;
|
|
|
|
function TRODataSnapSimpleAppServer.GetProviderByName(const iProviderName:string):TCustomProvider;
|
|
begin
|
|
result := ProviderManager.GetProviderByName(iProviderName);
|
|
end;
|
|
|
|
function TRODataSnapSimpleAppServer.GetProviderNames: TProviderNames;
|
|
begin
|
|
result := ProviderManager.GetProviderNames();
|
|
end;
|
|
|
|
{$R *.dfm}
|
|
|
|
initialization
|
|
//ToDo: maybe postpone this registration and move it to the constructor of the component?
|
|
//TROClassFactory.Create('AppServer', Create_AppServer, TAppServer_Invoker);
|
|
end.
|