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

167 lines
4.9 KiB
ObjectPascal

unit uROMasterServerSessionManager;
{----------------------------------------------------------------------------}
{ 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
Classes, uROClient, uROSessions, uROBinMessage, uROTypes,
ROMasterServerLibrary_Intf;
type
{ TROMasterServerSessionManager }
TROMasterServerSessionManager = class(TROCustomSessionManager)
private
fBINMessage : TROBinMessage;
fChannel: TROTransportChannel;
fSessionManager : IROSessionManager;
procedure SetChannel(const Value: TROTransportChannel);
function GetSessionManager: IROSessionManager;
protected
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
{ Overrides }
function DoFindSession(const aSessionID : TGUID; aUpdateTime: Boolean) : TROSession; override;
procedure DoDeleteSession(const aSessionID : TGUID; IsExpired : boolean); override;
procedure DoClearSessions(OnlyExpired : boolean); override;
function DoGetSessionCount : integer; override;
procedure DoReleaseSession(aSession : TROSession; NewSession : boolean); override;
property SessionManager : IROSessionManager read GetSessionManager;
property OnSessionDeleted;
public
constructor Create(aOwner : TComponent); override;
destructor Destroy; override;
procedure CheckProperties;
published
property Channel : TROTransportChannel read fChannel write SetChannel;
end;
implementation
uses
SysUtils, uROClasses, uRORes;
{ TROMasterServerSessionManager }
procedure TROMasterServerSessionManager.CheckProperties;
begin
Check(Channel = nil, Name + '.Channel must be assigned.');
Channel.CheckProperties;
end;
constructor TROMasterServerSessionManager.Create(aOwner: TComponent);
begin
inherited;
fBINMessage := TROBinMessage.Create(Self);
// in order to kill checktimer set interval to 0
Self.SessionCheckInterval := 0;
end;
destructor TROMasterServerSessionManager.Destroy;
begin
inherited;
end;
procedure TROMasterServerSessionManager.DoClearSessions(
OnlyExpired: boolean);
begin
// do nothing
end;
procedure TROMasterServerSessionManager.DoDeleteSession(
const aSessionID: TGUID; IsExpired: boolean);
begin
SessionManager.DeleteSession(GUIDToString(aSessionID));
end;
function TROMasterServerSessionManager.DoFindSession(
const aSessionID: TGUID; aUpdateTime: Boolean): TROSession;
var
usersession : TROUserSession;
begin
result := NIL;
usersession := SessionManager.ReadSession(GUIDToString(aSessionID));
if (usersession<>NIL) then try
//result := TROSession.Create(aSessionID);
result := DoCreateSession(aSessionID);
result.Created := usersession.Created;
result.LastAccessed := usersession.LastAccessed;
result.LoadFromStream(usersession.Data, TRUE);
finally
usersession.Free;
end;
end;
function TROMasterServerSessionManager.DoGetSessionCount: integer;
begin
result := SessionManager.GetSessionCount;
end;
procedure TROMasterServerSessionManager.DoReleaseSession(
aSession: TROSession; NewSession: boolean);
var data : Binary;
begin
data := Binary.Create;
try
aSession.SaveToStream(data, TRUE);
if NewSession
then SessionManager.CreateSession(GUIDToString(aSession.SessionID), data)
else SessionManager.UpdateSession(GUIDToString(aSession.SessionID), data);
aSession.Free();
finally
data.Free;
end;
end;
function TROMasterServerSessionManager.GetSessionManager: IROSessionManager;
begin
CheckProperties;
if (fSessionManager=NIL) then begin
fSessionManager := CoROSessionManager.Create(fBINMessage, fChannel);
end;
result := fSessionManager;
end;
procedure TROMasterServerSessionManager.Notification(
AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (Operation<>opRemove) then Exit;
if (AComponent=fChannel)
then fChannel := NIL;
end;
procedure TROMasterServerSessionManager.SetChannel(
const Value: TROTransportChannel);
begin
if (fChannel=Value) then Exit;
fChannel := Value;
fSessionManager := NIL;
if (fChannel<>NIL) then fChannel.FreeNotification(Self);
end;
end.