Componentes.Terceros.RemObj.../internal/5.0.23.613/1/RemObjects SDK for Delphi/Source/uROServerIntf.pas
david 472097efe5 - Eliminadas las librerías para Delphi 6 (Dcu\D6) en RO y DA.
- Recompilación de todos los paquetes de RO para poner RemObjects_Core_D10 como paquete de runtime/designtime.

git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.RemObjects@5 b6239004-a887-0f4b-9937-50029ccdca16
2007-09-10 11:08:08 +00:00

164 lines
5.0 KiB
ObjectPascal

unit uROServerIntf;
{----------------------------------------------------------------------------}
{ RemObjects SDK Library - Core Library }
{ }
{ compiler: Delphi 5 and up, Kylix 2 and up }
{ platform: Win32, Linux }
{ }
{ (c)opyright RemObjects Software. all rights reserved. }
{ }
{ Using this code requires a valid license of the RemObjects SDK }
{ which can be obtained at http://www.remobjects.com. }
{----------------------------------------------------------------------------}
{$I RemObjects.inc}
interface
uses
{$IFDEF REMOBJECTS_TRIAL}uROTrial,{$ENDIF}
{$IFDEF WIN32}Windows, {$ENDIF}
uRORes, uROClientIntf, uROTypes, Classes, SysUtils;
type
{$IFDEF DELPHI5}
{ IInterface }
IInterface = IUnknown;
{$ENDIF}
IROClassFactory = interface;
TROResponseOption = (roNoResponse, roDontEncrypt);
TROResponseOptions = set of TROResponseOption;
{ IROInvoker }
IROInvoker = interface
['{6BF28A4D-1511-4FD0-83C0-0F0A23322ACC}']
function HandleMessage(const aFactory : IROClassFactory;
const aMessage : IROMessage;
const aTransport : IROTransport;
out oResponseOptions: TROResponseOptions) : boolean;
end;
{ IROClassFactory }
IROClassFactory = interface
['{87580688-9994-4EB3-BDB9-E621ED52C3E9}']
procedure CreateInstance(const aClientID : TGUID; out anInstance : IInterface);
procedure ReleaseInstance(const aClientID: TGUID; var anInstance : IInterface);
function GetInterfaceName : string;
function GetInvoker : IROInvoker;
property InterfaceName : string read GetInterfaceName;
property Invoker : IROInvoker read GetInvoker;
end;
IROPooledClassFactory = interface(IROClassFactory)
['{DB0C4A2B-CA2C-4CDA-A02C-289918B29FA3}']
procedure ClearPool;
end;
{ IRODispatchNotifier }
IRODispatchNotifier = interface
['{C3359706-83B8-4285-866C-D4DD5960B183}']
procedure GetDispatchInfo(const aTransport : IROTransport; const aMessage : IROMessage);
end;
{ IRODestructorController }
IRODestructorController = interface
['{D590AF9A-1029-450B-A8B7-0EC8A93DF7DC}']
function CanBeDestroyed : boolean;
end;
{ IRODestructorControllerEx }
IRODestructorControllerEx = interface(IRODestructorController)
['{2897DFAE-A466-4886-ADC3-9F0D7DD393A8}']
procedure SetCanBeDestroyed(Value : boolean);
end;
{ IROObjectActivation }
IROObjectActivation = interface
['{071ECDF1-A4B0-4333-93B4-EE1B8609FF80}']
procedure OnActivate(aClientID: TGUID; const aMessage : IROMessage);
procedure OnDeactivate(aClientID: TGUID);
end;
{ IROObjectTimeout }
IROObjectTimeout = interface
['{DC7FC0CB-D3C6-4CA7-8F71-57ECE1392594}']
procedure OnTimeout;
end;
{ IROServerEventsBroker }
IROServerEventsBroker = interface
['{5B6A3449-3B13-4B0A-B1FF-B2FAA18D57B1}']
procedure RegisterEventClient(const ClientID, EventTypes : string);
procedure UnregisterEventClient(const ClientID, EventTypes : string);
function GetEventsData(const ClientID : string; out EventsData : Binary) : integer;
end;
TROEventData = class;
IROActiveEventServer = interface
['{DD0B0C09-2D17-46EA-8110-E7BEE9B8AB7B}']
procedure EventsRegistered(aSender : TObject; aClient: TGUID);
procedure DispatchEvent(anEventDataItem : TROEventData; aSessionReference : TGUID; aSender: TObject); // asender is TROEventRepository
end;
{ TROEventData }
TROEventData = class
private
fData: TStream;
fRefCount: integer;
// fShouldRemoveFromOwner: Boolean;
protected
public
constructor Create(anEventDataStream : TMemoryStream);
destructor Destroy; override;
function AddRef : integer;
function RemoveRef : integer;
// property ShouldRemoveFromOwner: Boolean read fShouldRemoveFromOwner write fShouldRemoveFromOwner;
property Data : TStream read fData;
end;
implementation
uses
uROClasses;
{ TROEventData }
function TROEventData.AddRef : integer;
begin
result := InterlockedIncrement(fRefCount);
end;
constructor TROEventData.Create(anEventDataStream : TMemoryStream);
begin
inherited Create;
fRefCount := 1;
// fShouldRemoveFromOwner := true;
fData := TMemoryStream.Create;
anEventDataStream.Position := 0;
fData.CopyFrom(anEventDataStream, anEventDataStream.Size);
end;
destructor TROEventData.Destroy;
begin
FreeAndNIL(fData);
inherited;
end;
function TROEventData.RemoveRef : integer;
begin
result := InterlockedDecrement(fRefCount);
end;
end.