AbetoDesign_FactuGES2/Source/Servidor/Utiles/uSesionesUtils.pas

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.