unit ROMasterServerLibrary_Intf; {----------------------------------------------------------------------------} { This unit was automatically generated by the RemObjects SDK after reading } { the RODL file associated with this project . } { } { Do not modify this unit manually, or your changes will be lost when this } { unit is regenerated the next time you compile the project. } {----------------------------------------------------------------------------} {$I RemObjects.inc} interface uses {vcl:} Classes, TypInfo, {RemObjects:} uROXMLIntf, uROClasses, uROClient, uROTypes, uROClientIntf; const { Library ID } LibraryUID = '{3B3A1E32-67EF-4541-A26A-73F27A8608BD}'; TargetNamespace = ''; { Service Interface ID's } IROSessionManager_IID : TGUID = '{9B77C6B4-F2CA-4CFF-91F5-A194265725CF}'; { Event ID's } type { Forward declarations } IROSessionManager = interface; TROSessionManagerConfiguration = class; TROUserSession = class; { TROSessionManagerConfiguration } TROSessionManagerConfiguration = class(TROComplexType) private fMaxSessions: Integer; fSessionDuration: Integer; fMessageDuration: Integer; public procedure Assign(iSource: TPersistent); override; procedure ReadComplex(ASerializer: TObject); override; procedure WriteComplex(ASerializer: TObject); override; published property MaxSessions:Integer read fMaxSessions write fMaxSessions; property SessionDuration:Integer read fSessionDuration write fSessionDuration; property MessageDuration:Integer read fMessageDuration write fMessageDuration; end; { TROSessionManagerConfigurationCollection } TROSessionManagerConfigurationCollection = class(TROCollection) protected constructor Create(aItemClass: TCollectionItemClass); overload; function GetItems(aIndex: integer): TROSessionManagerConfiguration; procedure SetItems(aIndex: integer; const Value: TROSessionManagerConfiguration); public constructor Create; overload; function Add: TROSessionManagerConfiguration; reintroduce; property Items[Index: integer]:TROSessionManagerConfiguration read GetItems write SetItems; default; end; { TROUserSession } TROUserSession = class(TROComplexType) private fSessionID: AnsiString; fCreated: DateTime; fLastAccessed: DateTime; fData: Binary; function GetData: Binary; public procedure Assign(iSource: TPersistent); override; procedure ReadComplex(ASerializer: TObject); override; procedure WriteComplex(ASerializer: TObject); override; published property SessionID:AnsiString read fSessionID write fSessionID; property Created:DateTime read fCreated write fCreated; property LastAccessed:DateTime read fLastAccessed write fLastAccessed; property Data:Binary read GetData write fData; end; { TROUserSessionCollection } TROUserSessionCollection = class(TROCollection) protected constructor Create(aItemClass: TCollectionItemClass); overload; function GetItems(aIndex: integer): TROUserSession; procedure SetItems(aIndex: integer; const Value: TROUserSession); public constructor Create; overload; function Add: TROUserSession; reintroduce; property Items[Index: integer]:TROUserSession read GetItems write SetItems; default; end; { IROSessionManager } IROSessionManager = interface ['{9B77C6B4-F2CA-4CFF-91F5-A194265725CF}'] function ReadConfiguration: TROSessionManagerConfiguration; procedure UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); function CreateSession(const SessionID: AnsiString; const SessionData: Binary): Boolean; function ReadSession(const SessionID: AnsiString): TROUserSession; procedure UpdateSession(const SessionID: AnsiString; const SessionData: Binary); function DeleteSession(const SessionID: AnsiString): Boolean; procedure ClearSessions(const OnlyExpired: Boolean); function GetSessionCount: Integer; procedure StoreMessage(const SourceSessionID: AnsiString; const MessageData: Binary); function GetMessages(const SessionID: AnsiString; out MessageData: Binary): Integer; function GetTimeout: Integer; procedure SetTimeout(const value: Integer); end; { CoROSessionManager } CoROSessionManager = class class function Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IROSessionManager; end; { TROSessionManager_Proxy } TROSessionManager_Proxy = class(TROProxy, IROSessionManager) protected function __GetInterfaceName:string; override; function ReadConfiguration: TROSessionManagerConfiguration; procedure UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); function CreateSession(const SessionID: AnsiString; const SessionData: Binary): Boolean; function ReadSession(const SessionID: AnsiString): TROUserSession; procedure UpdateSession(const SessionID: AnsiString; const SessionData: Binary); function DeleteSession(const SessionID: AnsiString): Boolean; procedure ClearSessions(const OnlyExpired: Boolean); function GetSessionCount: Integer; procedure StoreMessage(const SourceSessionID: AnsiString; const MessageData: Binary); function GetMessages(const SessionID: AnsiString; out MessageData: Binary): Integer; function GetTimeout: Integer; procedure SetTimeout(const value: Integer); end; implementation uses {vcl:} SysUtils, {RemObjects:} uROEventRepository, uROSerializer, uRORes; { TROSessionManagerConfiguration } procedure TROSessionManagerConfiguration.Assign(iSource: TPersistent); var lSource: ROMasterServerLibrary_Intf.TROSessionManagerConfiguration; begin inherited Assign(iSource); if (iSource is ROMasterServerLibrary_Intf.TROSessionManagerConfiguration) then begin lSource := ROMasterServerLibrary_Intf.TROSessionManagerConfiguration(iSource); MaxSessions := lSource.MaxSessions; SessionDuration := lSource.SessionDuration; MessageDuration := lSource.MessageDuration; end; end; procedure TROSessionManagerConfiguration.ReadComplex(ASerializer: TObject); var l_MaxSessions: Integer; l_MessageDuration: Integer; l_SessionDuration: Integer; begin if TROSerializer(ASerializer).RecordStrictOrder then begin l_MaxSessions := MaxSessions; TROSerializer(ASerializer).ReadInteger('MaxSessions', otSLong, l_MaxSessions); MaxSessions := l_MaxSessions; l_SessionDuration := SessionDuration; TROSerializer(ASerializer).ReadInteger('SessionDuration', otSLong, l_SessionDuration); SessionDuration := l_SessionDuration; l_MessageDuration := MessageDuration; TROSerializer(ASerializer).ReadInteger('MessageDuration', otSLong, l_MessageDuration); MessageDuration := l_MessageDuration; end else begin l_MaxSessions := MaxSessions; TROSerializer(ASerializer).ReadInteger('MaxSessions', otSLong, l_MaxSessions); MaxSessions := l_MaxSessions; l_MessageDuration := MessageDuration; TROSerializer(ASerializer).ReadInteger('MessageDuration', otSLong, l_MessageDuration); MessageDuration := l_MessageDuration; l_SessionDuration := SessionDuration; TROSerializer(ASerializer).ReadInteger('SessionDuration', otSLong, l_SessionDuration); SessionDuration := l_SessionDuration; end; end; procedure TROSessionManagerConfiguration.WriteComplex(ASerializer: TObject); var l_MaxSessions: Integer; l_MessageDuration: Integer; l_SessionDuration: Integer; begin if TROSerializer(ASerializer).RecordStrictOrder then begin TROSerializer(ASerializer).ChangeClass(TROSessionManagerConfiguration); l_MaxSessions := MaxSessions; TROSerializer(ASerializer).WriteInteger('MaxSessions', otSLong, l_MaxSessions); l_SessionDuration := SessionDuration; TROSerializer(ASerializer).WriteInteger('SessionDuration', otSLong, l_SessionDuration); l_MessageDuration := MessageDuration; TROSerializer(ASerializer).WriteInteger('MessageDuration', otSLong, l_MessageDuration); end else begin l_MaxSessions := MaxSessions; TROSerializer(ASerializer).WriteInteger('MaxSessions', otSLong, l_MaxSessions); l_MessageDuration := MessageDuration; TROSerializer(ASerializer).WriteInteger('MessageDuration', otSLong, l_MessageDuration); l_SessionDuration := SessionDuration; TROSerializer(ASerializer).WriteInteger('SessionDuration', otSLong, l_SessionDuration); end; end; { TROSessionManagerConfigurationCollection } constructor TROSessionManagerConfigurationCollection.Create; begin inherited Create(TROSessionManagerConfiguration); end; constructor TROSessionManagerConfigurationCollection.Create(aItemClass: TCollectionItemClass); begin inherited Create(aItemClass); end; function TROSessionManagerConfigurationCollection.Add: TROSessionManagerConfiguration; begin result := TROSessionManagerConfiguration(inherited Add); end; function TROSessionManagerConfigurationCollection.GetItems(aIndex: integer): TROSessionManagerConfiguration; begin result := TROSessionManagerConfiguration(inherited Items[aIndex]); end; procedure TROSessionManagerConfigurationCollection.SetItems(aIndex: integer; const Value: TROSessionManagerConfiguration); begin TROSessionManagerConfiguration(inherited Items[aIndex]).Assign(Value); end; { TROUserSession } procedure TROUserSession.Assign(iSource: TPersistent); var lSource: ROMasterServerLibrary_Intf.TROUserSession; begin inherited Assign(iSource); if (iSource is ROMasterServerLibrary_Intf.TROUserSession) then begin lSource := ROMasterServerLibrary_Intf.TROUserSession(iSource); SessionID := lSource.SessionID; Created := lSource.Created; LastAccessed := lSource.LastAccessed; if Assigned(Data) then Data.Assign(lSource.Data); end; end; function TROUserSession.GetData: Binary; begin result := fData; end; procedure TROUserSession.ReadComplex(ASerializer: TObject); var l_Created: DateTime; l_Data: Binary; l_LastAccessed: DateTime; l_SessionID: AnsiString; begin if TROSerializer(ASerializer).RecordStrictOrder then begin l_SessionID := SessionID; TROSerializer(ASerializer).ReadAnsiString('SessionID', l_SessionID); SessionID := l_SessionID; l_Created := Created; TROSerializer(ASerializer).ReadDateTime('Created', l_Created); Created := l_Created; l_LastAccessed := LastAccessed; TROSerializer(ASerializer).ReadDateTime('LastAccessed', l_LastAccessed); LastAccessed := l_LastAccessed; l_Data := Data; TROSerializer(ASerializer).ReadBinary('Data', l_Data); if Data <> l_Data then Data.Free; Data := l_Data; end else begin l_Created := Created; TROSerializer(ASerializer).ReadDateTime('Created', l_Created); Created := l_Created; l_Data := Data; TROSerializer(ASerializer).ReadBinary('Data', l_Data); if Data <> l_Data then Data.Free; Data := l_Data; l_LastAccessed := LastAccessed; TROSerializer(ASerializer).ReadDateTime('LastAccessed', l_LastAccessed); LastAccessed := l_LastAccessed; l_SessionID := SessionID; TROSerializer(ASerializer).ReadAnsiString('SessionID', l_SessionID); SessionID := l_SessionID; end; end; procedure TROUserSession.WriteComplex(ASerializer: TObject); var l_Created: DateTime; l_Data: Binary; l_LastAccessed: DateTime; l_SessionID: AnsiString; begin if TROSerializer(ASerializer).RecordStrictOrder then begin TROSerializer(ASerializer).ChangeClass(TROUserSession); l_SessionID := SessionID; TROSerializer(ASerializer).WriteAnsiString('SessionID', l_SessionID); l_Created := Created; TROSerializer(ASerializer).WriteDateTime('Created', l_Created); l_LastAccessed := LastAccessed; TROSerializer(ASerializer).WriteDateTime('LastAccessed', l_LastAccessed); l_Data := Data; TROSerializer(ASerializer).WriteBinary('Data', l_Data); end else begin l_Created := Created; TROSerializer(ASerializer).WriteDateTime('Created', l_Created); l_Data := Data; TROSerializer(ASerializer).WriteBinary('Data', l_Data); l_LastAccessed := LastAccessed; TROSerializer(ASerializer).WriteDateTime('LastAccessed', l_LastAccessed); l_SessionID := SessionID; TROSerializer(ASerializer).WriteAnsiString('SessionID', l_SessionID); end; end; { TROUserSessionCollection } constructor TROUserSessionCollection.Create; begin inherited Create(TROUserSession); end; constructor TROUserSessionCollection.Create(aItemClass: TCollectionItemClass); begin inherited Create(aItemClass); end; function TROUserSessionCollection.Add: TROUserSession; begin result := TROUserSession(inherited Add); end; function TROUserSessionCollection.GetItems(aIndex: integer): TROUserSession; begin result := TROUserSession(inherited Items[aIndex]); end; procedure TROUserSessionCollection.SetItems(aIndex: integer; const Value: TROUserSession); begin TROUserSession(inherited Items[aIndex]).Assign(Value); end; { CoROSessionManager } class function CoROSessionManager.Create(const aMessage: IROMessage; aTransportChannel: IROTransportChannel): IROSessionManager; begin result := TROSessionManager_Proxy.Create(aMessage, aTransportChannel); end; { TROSessionManager_Proxy } function TROSessionManager_Proxy.__GetInterfaceName:string; begin result := 'ROSessionManager'; end; function TROSessionManager_Proxy.ReadConfiguration: TROSessionManagerConfiguration; begin try result := nil; __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ReadConfiguration'); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(ROMasterServerLibrary_Intf.TROSessionManagerConfiguration), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; procedure TROSessionManager_Proxy.UpdateConfiguration(const Configuration: TROSessionManagerConfiguration); begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'UpdateConfiguration'); __Message.Write('Configuration', TypeInfo(ROMasterServerLibrary_Intf.TROSessionManagerConfiguration), Configuration, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.CreateSession(const SessionID: AnsiString; const SessionData: Binary): Boolean; begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'CreateSession'); __Message.Write('SessionID', TypeInfo(AnsiString), SessionID, []); __Message.Write('SessionData', TypeInfo(Binary), SessionData, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(Boolean), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.ReadSession(const SessionID: AnsiString): TROUserSession; begin try result := nil; __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ReadSession'); __Message.Write('SessionID', TypeInfo(AnsiString), SessionID, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(ROMasterServerLibrary_Intf.TROUserSession), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; procedure TROSessionManager_Proxy.UpdateSession(const SessionID: AnsiString; const SessionData: Binary); begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'UpdateSession'); __Message.Write('SessionID', TypeInfo(AnsiString), SessionID, []); __Message.Write('SessionData', TypeInfo(Binary), SessionData, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.DeleteSession(const SessionID: AnsiString): Boolean; begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'DeleteSession'); __Message.Write('SessionID', TypeInfo(AnsiString), SessionID, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(Boolean), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; procedure TROSessionManager_Proxy.ClearSessions(const OnlyExpired: Boolean); begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'ClearSessions'); __Message.Write('OnlyExpired', TypeInfo(Boolean), OnlyExpired, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.GetSessionCount: Integer; begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetSessionCount'); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(Integer), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; procedure TROSessionManager_Proxy.StoreMessage(const SourceSessionID: AnsiString; const MessageData: Binary); begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'StoreMessage'); __Message.Write('SourceSessionID', TypeInfo(AnsiString), SourceSessionID, []); __Message.Write('MessageData', TypeInfo(Binary), MessageData, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.GetMessages(const SessionID: AnsiString; out MessageData: Binary): Integer; begin try MessageData := nil; __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetMessages'); __Message.Write('SessionID', TypeInfo(AnsiString), SessionID, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(Integer), result, []); __Message.Read('MessageData', TypeInfo(Binary), MessageData, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; function TROSessionManager_Proxy.GetTimeout: Integer; begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'GetTimeout'); __Message.Finalize; __TransportChannel.Dispatch(__Message); __Message.Read('Result', TypeInfo(Integer), result, []); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; procedure TROSessionManager_Proxy.SetTimeout(const value: Integer); begin try __Message.InitializeRequestMessage(__TransportChannel, 'ROMasterServerLibrary', __InterfaceName, 'SetTimeout'); __Message.Write('value', TypeInfo(Integer), value, []); __Message.Finalize; __TransportChannel.Dispatch(__Message); finally __Message.UnsetAttributes(__TransportChannel); __Message.FreeStream; end end; initialization RegisterROClass(TROSessionManagerConfiguration); RegisterROClass(TROUserSession); RegisterProxyClass(IROSessionManager_IID, TROSessionManager_Proxy); finalization UnregisterROClass(TROSessionManagerConfiguration); UnregisterROClass(TROUserSession); UnregisterProxyClass(IROSessionManager_IID); end.