Componentes.Terceros.RemObj.../internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/DataSnap/uRODataSnapProviderPublisher.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

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.