git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/branches/D2007-DA5@21 0c75b7a4-871f-7646-8a2f-f78d34cc349f
136 lines
2.9 KiB
ObjectPascal
136 lines
2.9 KiB
ObjectPascal
unit uSesionesUtils;
|
|
|
|
interface
|
|
|
|
uses
|
|
{VCL:} SysUtils, Contnrs, SyncObjs, Variants,
|
|
{RemObjects} uROSessions;
|
|
|
|
type
|
|
|
|
TSesionesHelper = class
|
|
private
|
|
lObjects: TObjectList;
|
|
csObjects: TCriticalSection;
|
|
function AddObject( aObj: TObject ) : integer;
|
|
procedure DeleteObject( aObj: TObject );
|
|
function GetObject (aIndex : Integer) : TObject;
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
function GetSessionObject(aSession: TROSession; aObjName: string): TObject;
|
|
procedure SaveSessionObject(aSession: TROSession; aObjName: string; aObj: TObject);
|
|
procedure DeleteSessionObject(aSession: TROSession; aObjName: string);
|
|
end;
|
|
|
|
var
|
|
SesionesHelper: TSesionesHelper;
|
|
|
|
implementation
|
|
|
|
{ TSesionesHelper }
|
|
|
|
function TSesionesHelper.AddObject(aObj: TObject) : integer;
|
|
begin
|
|
csObjects.Enter;
|
|
try
|
|
Result := lObjects.Add(aObj);
|
|
finally
|
|
csObjects.Leave;
|
|
end;
|
|
end;
|
|
|
|
constructor TSesionesHelper.Create;
|
|
begin
|
|
csObjects := TCriticalSection.Create;
|
|
lObjects := TObjectList.Create;
|
|
end;
|
|
|
|
procedure TSesionesHelper.DeleteObject(aObj: TObject);
|
|
var
|
|
idx: Integer;
|
|
begin
|
|
csObjects.Enter;
|
|
try
|
|
idx := lObjects.IndexOf( aObj );
|
|
if idx > -1 then
|
|
begin
|
|
lObjects.Remove(aObj);
|
|
end;
|
|
finally
|
|
csObjects.Leave;
|
|
end;
|
|
end;
|
|
|
|
procedure TSesionesHelper.DeleteSessionObject(aSession: TROSession;
|
|
aObjName: string);
|
|
var
|
|
oldObj: TObject;
|
|
begin
|
|
oldObj := GetSessionObject(aSession, aObjName);
|
|
if Assigned(oldObj) then
|
|
begin
|
|
DeleteObject( oldObj );
|
|
aSession.Values[aObjName] := NULL;
|
|
end;
|
|
end;
|
|
|
|
destructor TSesionesHelper.Destroy;
|
|
begin
|
|
// Free class members
|
|
FreeAndNil( lObjects );
|
|
FreeAndNil( csObjects );
|
|
inherited;
|
|
end;
|
|
|
|
function TSesionesHelper.GetObject(aIndex: Integer): TObject;
|
|
begin
|
|
Result := NIL;
|
|
csObjects.Enter;
|
|
try
|
|
if (AIndex > -1) and (AIndex < lObjects.Count) then
|
|
Result := lObjects.Items[AIndex];
|
|
finally
|
|
csObjects.Leave;
|
|
end;
|
|
end;
|
|
|
|
function TSesionesHelper.GetSessionObject(aSession: TROSession;
|
|
aObjName: string): TObject;
|
|
var
|
|
aValue : Variant;
|
|
begin
|
|
Result := NIL;
|
|
aValue := aSession.Values[aObjName];
|
|
|
|
if VarIsType(aValue, varInteger) then
|
|
Result := GetObject(aValue);
|
|
end;
|
|
|
|
// Saves a delhpi TObject to a session variable
|
|
procedure TSesionesHelper.SaveSessionObject(aSession: TROSession;
|
|
aObjName: string; aObj: TObject);
|
|
var
|
|
aIndex : Integer;
|
|
begin
|
|
// Free the existing object if it has already been assigned
|
|
DeleteSessionObject(aSession, aObjName);
|
|
|
|
if Assigned( aObj ) then
|
|
begin
|
|
// Add the object name to the sessionobjectslist
|
|
AIndex := AddObject(aObj);
|
|
aSession.Values[aObjName] := AIndex;
|
|
end
|
|
else
|
|
aSession.Values[aObjName] := NULL;
|
|
end;
|
|
|
|
initialization
|
|
SesionesHelper := TSesionesHelper.Create;
|
|
|
|
finalization
|
|
FreeAndNil( SesionesHelper );
|
|
|
|
end.
|